java序列化与反序列化

1. Serializable接口

1.仅是一个标记接口,不包括任何方法。
2.Java的对象序列化是将实现了Sreializable接口的对象转化成一个字节序列,并在以后可以将其将其回复为原来的对象,甚至是通过网络。
3. 实现轻量级(在代码中显式地序列化和反序列化)持久性(对象的生命周期不取决于程序是否正在运行)
4. 为什么要序列化?java将对象作为参数传递时,传的是引用,即内存地址,序列化则将对象转化为文本格式数据,可以直接在网络中传输。

2. 实现序列化

  1. 创建OuputStream对象,将其分装在一个ObjectOuputStream对象中
  2. 调用writeObject()方法即可序列化对象

反序列化则使用InputStream与ObjectInputStream.readObject()。
对象的序列化同时还会序列化对象中包含的引用所指向的对象(包括这些对象所包含的引用,依此类推)。
在反序列化恢复对象时,并不调用对象的任何构造函数,只根据字节数据。只需要保证jvm可以找到相关的 .class文件。

3. 序列化控制

transient :该关键字修饰的属性,是不会被序列化的。
static:静态的属性也不会被序列化。(直接序列化Class对象可以更方便地保存静态属性)

4. serialVersionUID

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。如果接收者加载的该对象的类的 serialVersionUID 与对应的发送者的类的版本号不同,则反序列化将会导致 InvalidClassException。
实现Serializable 接口,一定要为 serialVersionUID 赋值(java可以自动赋值)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值