Java序列化深入剖析和总结(精华)

来源:互联网 发布:ros绑定mac 编辑:程序博客网 时间:2024/05/29 16:20

1、什么是序列化和反序列化

      序列化:在JVM中把对象拷贝到二进制流中

      反序列化:是把二进制流还原为对象

注意:序列化不仅仅是把对象以一连串字节描述的过程(其中涉及到流的输入输出操作),类被编译成二进制字节码文件加载到JVM中就不是序列化过程。

2.序列化的目的

 1)对象序列化的目标是将对象保存到磁盘上,或允许在网络中直接传输对象、进程间传输对象(RPC是分布式框架hadoop实现的基础就用到了对象的序列化)

 2)序列化是 RMI(Remote Method Invoke – 远程方法调用)过程的参数和返回值都必须实现的机制

2、什么情况下需要序列化 

     a)当你想把的内存中的对象保存到一个文件中或者数据库中时候
     b)当你想用套接字在网络上传送对象的时候
     c)当你想通过RMI传输对象的时候

3、ransient关键字

     可以让序列化对象的某些属性放弃序列化的机会

4、对于序列化对象中有引用对象的情况

     引用对象必须实现序化

5、实现序列化的方式

     1)Serializable实现序列化:没有具体的方式 
     2)Externalizable也可以实现序列化:有具体的方法

6.Externalizable的API


voidreadExternal(ObjectInput in)
          对象实现 readExternal 方法来恢复其内容,它通过调用 DataInput 的方法来恢复其基础类型,调用 readObject 来恢复对象、字符串和数组。 voidwriteExternal(ObjectOutput out)
          该对象可实现 writeExternal 方法来保存其内容,它可以通过调用 DataOutput 的方法来保存其基本值,或调用 ObjectOutput 的 writeObject 方法来保存对象、字符串和数组。

7、对比

1.Serializable实现序列化不需要程序员手动的参与序列化的过程.JVM已经为我们实现了整个序列化的过程

2.Externalizable是Serializable的子类,需要程序员手动的参与序列化的过程,同时可以提供额外的数据的序列化.

3.Serializable序列化简单一些,但是要消耗性能,Externalizable比Serializable要高一些.

4.如果不需要过多的知道序列化的过程那么我们还是选者Serializable不容易出错,Externalizable比较容易出错


参考代码:



 

 

 






1 0
原创粉丝点击