java序列化机制Serialize接口

概念

       Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时, 这些对象才可能存在,即,这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中, 就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象Java 对象序列化就能够帮助我们实现该功能。

        序列化对象以字节数组保持-静态成员不保存 :使用 Java 对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对 象序列化不会关注类中的静态变量。

        序列化用户远程对象传输 :除了在持久化对象时会用到对象序列化之外,当使用 RMI(远程方法调用),或在网络中传递对象时都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。

java本身的序列化机制存在的问题

  • 1.序列化数据结果比较大、传输效率比较低
  • 2.不能跨语言对接

序列化和反序列化的概念

  • 把对象转化为字节序列的过程称之为对象的序列化
  • 反之,称为反序列化

怎么去实现一个序列化操作

  • 1.实现Serializable接口
  • 2.ObjectInputStream  
  • 3.ObjectOutputStream 

serialVersionUID的作用

       serialVersionUID适用于java序列化机制。简单来说,JAVA序列化的机制是通过判断类的serialVersionUID来验证的版本一致的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID于本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本一致的异常,即是InvalidCastException。

       具体序列化的过程是这样的:序列化操作时会把系统当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会自动检测文件中的serialVersionUID,判断它是否与当前类中的serialVersionUID一致。如果一致说明序列化文件的版本与当前类的版本是一样的,可以反序列化成功,否则就失败;

静态变量的序列化

  • 序列化并不保存静态变量的状态

Transient关键字

  • transient关键字表示制定属性不参与序列化

父子类问题

  • 如果父类没有实现序列化,而子类实现序列化。那么父类中的成员没办法做序列化操作

序列化的存储规则

  • 对同一个du对象进行多次写入,打印出的第一次存储结果和第二次存储结果,只多了5个字节的引用关系。并不会da导致文件累加。

序列化实现深度克隆

  • 浅拷贝(浅复制、浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所拷贝的对象,而不复制它所引用的对象。
  • 深拷贝(深复制、深克隆):被复制对象的所有变量都含有与原来的uix相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将zh指向复制过的新对象,而不再是原有的那些引用的对象。

换言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

总结

  • 1.在java中,只有一个类实现了java.io.Serializable接口,那么它可以被序列化。
  • 2.通过ObjectOutputStream和ObjectInputStream对对象进行序列化合反序列化操作。
  • 3.对象是否允许被反序列化,不仅仅是取决于对象的代码是否一致,同时还有一个重要的因素(UID)。
  • 4.序列化不保存静态变量。
  • 5.要想父类对象也参与序列化操作,那么必须要让父类也实现Serialzable接口。
  • 6.Transient关键字,主要是控制变量是否能够被序列化。如果没有序列化的成员变量反序列化后,会被设置成初始值,比如String->null。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值