什么是 java 序列化?什么情况下需要序列化?
序列化:将 Java 对象转换成字节流的过程.
反序列化:将字节流转换成 Java 对象的过程.
想把内存中的对象状态保存到一个文件中或者数据库中的时候(最常用,如保存到redis);
想用套接字在网络上传送对象的时候;
想通过RMI传输对象的时候;
类实现 Serializable 接口即可,这个接口没有需要实现的方法.实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化.
某个类可以被序列化,则其子类也可以被序列化
声明为 static 和 transient 的成员变量,不能被序列化.static 成员变量是描述类级别的属性,transient 表示临时数据
反序列化读取序列化对象的顺序要保持一致
以 User 实体类为例:
@Data @EqualsAndHashCode(callSuper = false) @AllArgsConstructor @NoArgsConstructor //实现序列化 public class User implements Serializable { private Integer age; }
测试:
@Test
public void test1() throws IOException, ClassNotFoundException {
System.out.println(readUser.toString());
}
在项目根目录可以找到 user.txt 文件并看到输出结果.
我使用的是 spring-data-redis, spring-data-redis默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略
redisTemplate 可自定义各种 key 和各种 value 的序列化方式:
defaultSerializer: 默认序列化策略
key:普通key,非hash
value:普通value,非hash
hashKey:hash的filed
hashValue:hash的value
总共有以下几个序列化类:
JacksonJsonRedisSerializer: 序列化object对象为json字符串
JdkSerializationRedisSerializer: 序列化java对象(被序列化的对象必须实现Serializable接口),无法转义成对象.
StringRedisSerializer: 简单的字符串序列化
GenericToStringSerializer:类似StringRedisSerializer的字符串序列化
**StringRedisTemplate **默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的.序列化类为:StringRedisSerializer**RedisTemplate **默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的.序列化类为:JdkSerializationRedisSerializer
key和hashKey: 推荐使用 StringRedisSerializer: 简单的字符串序列化
以上就是土嘎嘎小编为大家整理的Java 序列化介绍及 Redis 序列化方式相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!