序列化和反序列化 序列化java序列化,想必大家都很清楚吧。
不就是实现Serializable接口吗,目的就是为了将对象转为二进制,方便传输。你说对了,但事实往往没有这么简单
序列化就是将对象的状态转为特定流的过程
- 对象的状态:那么静态变量可以被转化吗,不可以,因为静态变量是数据类的而不是变量。
- 流: 也就是转为字节序列
什么时候使用序列化反序列化获取特定流中数据重新构建对象的过程
大家都知道,对象是保存在内存中的,更准确的说是位于JVM中,生命周期收到JVM的限制,如果我们在另一个服务中使用该对象,或者将对象保存在硬盘上,就需要通过IO来处理,也就是序列化
- 当我们将一个对象保存在硬盘上,之后可能会用的情况,会用要序列化。
- 当一个服务,去调用另一个服务中的对象。因为该对象需要在网络上传输,所以也需要实现序列化。(建议微服务中所有pojo类都实现序列化接口)
-
serialVersionUID
实现序列化的接口会默认生成一个serialVersionUID,反序列化时会对比流中serialVersionUID的值与对象的serialVersionUID,是否相等,不相等则会抛出serialVersionUID 异常。因为对象被修改,或者因为编译器的问题,可能会导致生成的serialVersionUID不同而出错。所以我们一定要手动的声明serialVersionUID。private static final long serialVersionUID = 1L;



