什么是 java 序列化?什么情况下需要序列化?
类实现 Serializable 接口即可,这个接口没有需要实现的方法。实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化。
以 User 实体类为例:
@Data @EqualsAndHashCode(callSuper = false) @AllArgsConstructor @NoArgsConstructor //实现序列化 public class User implements Serializable { private static final long serialVersionUID=1L; @ApiModelProperty(value = "主键ID") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "姓名") private String name; @ApiModelProperty(value = "年龄") private Integer age; }
测试:
@Test public void test1() throws IOException, ClassNotFoundException { //序列化对象User ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.txt")); User user = new User(2L, "haha", 13); oos.writeObject(user); //清除缓存、关闭 oos.flush(); oos.close(); //反序列化 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.txt")); User readUser = (User) ois.readObject(); System.out.println(readUser.toString()); }
在项目根目录可以找到 user.txt 文件并看到输出结果。
参考资料1:https://blog.csdn.net/meism5/article/details/90413987
参考资料2:https://blog.csdn.net/Mr_EvanChen/article/details/79724426
我使用的是 spring-data-redis, spring-data-redis默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略
redisTemplate 可自定义各种 key 和各种 value 的序列化方式:
总共有以下几个序列化类:
推荐使用GenericJackson2JsonRedisSerializer 或 Jackson2JsonRedisSerializer 。
**StringRedisTemplate **默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。序列化类为:StringRedisSerializer
**RedisTemplate **默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。序列化类为:JdkSerializationRedisSerializer
key和hashKey: 推荐使用 StringRedisSerializer: 简单的字符串序列化
value和hashValue: 推荐使用GenericJackson2JsonRedisSerializer:类似Jackson2JsonRedisSerializer,但使用时构造函数不用特定的类
参考资料:https://blog.csdn.net/y532798113/article/details/82690781