java序列化

what is 序列化?

java对象只有当jvm运行的时候才存在,但是在现实中需要jvm不运行的时候也能用java对象,所以要将对象序列化成持久对象。

对象序列化,就是将对象存储成字节,当需要用的时候再组装成对象。序列化只保存对象的“状态”,不会关注类中的静态变量。

除了持久化对象,当RMI(远程方法调用)时也需要序列化。

实现java.io.serializable接口即可实现序列化。

transient关键词

实际应用中为乐简化序列化或者是避开敏感词,声明为transient的字段就可以不被序列化。

序列化中使用objectinputstream/objectoutstream进行对象传输。writeobject/readobject方法用于将声明为transient的字段进行默认序列化,主要是对象读写功能,调用的是objectinputstream/objectoutstream里面的方法。

Externalizable接口

另外一种序列化方法。继承自Serializable,但是里面的方法必须程序员自己去写。

另外,使用Externalizable进行序列化时,当读取对象时,会调用被序列化类的无参构造器去创建一个新的对象,然后再将被保存对象的字段的值分别填充到新对象中。这就是为什么在此次序列化过程中Person类的无参构造器会被调用。由于这个原因,实现Externalizable接口的类必须要提供一个无参的构造器,且它的访问权限为public。

无论是实现Serializable接口,或是Externalizable接口,当从I/O流中读取对象时,readResolve()方法都会被调用到。实际上就是用readResolve()中返回的对象直接替换在反序列化过程中创建的对象。

抽象很。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正如前文《Java序列化心得(一):序列化设计和默认序列化格式的问题》中所提到的,默认序列化方法存在各种各样的问题...
    登高且赋阅读 12,696评论 0 19
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 13,748评论 0 24
  • 概念 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。 这两个过程结...
    Moonsmile阅读 2,962评论 0 0
  • 1. 对象序列化定义 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,...
    mance阅读 1,846评论 0 0
  • 如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件。那你最好再阅读该篇文章,文章对序列化...
    jiangmo阅读 3,443评论 0 2