Java序列化,如何实现序列化和反序列化,常见的序列化协议有哪些?

Java序列化定义

  将那些实现了Serializable接口的对象转换成一个字节序列,并且能够在以后将这个字节序列完全恢复为原来的对象,序列化可以弥补不同操作系统之间的差异。


Java序列化的作用

  Java远程方法调用(RMI)

  对JavaBeans进行序列化


如何实现序列化和反序列化

  实现序列化的方法

      1. 实现Serializable接口

           --该接口是一个可序列化的标志,并没有包含实际的属性和方法。

           --如果不在该方法中添加readObject()和writeObject()方法,则采取默认的序列化机制。如果添加了这两个方法之后还                  想利用Java默认的序列化机制,则在这两个方法中分别调用defaultReadObject()和defaultWriteObject()两个方法。

           --为了保证安全性,可以使用transient关键字进行修饰不必序列化的属性。因为在反序列化时,private修饰的属性也能                 被查看到。

      2. 实现ExternalSerializeable方法

           自己对要序列化的内容进行控制,控制哪些属性能被序列化,哪些不能被序列化。

  反序列化

     --实现Serializable接口对象在反序列化时不需要调用对象所在类的构造方法,完全基于字节。

     --实现externalSerializable接口的方法在反序列化时会调用构造方法。

  注意事项

      --被static修饰的属性不会被序列化

      --对象的类名、属性名都会被序列化,方法不会被序列化。

      --要保证序列化对象所在类的属性也是可以被序列化的。

      --当通过网络、文件进行序列化时,必须按照写入的顺序读取对象。

      --反序列化时必须有序列化对象时的class文件。

      --最好显示地声明serializableID,因为在不同的JVM之间,默认生成serializeableID可能不同,会造成反序列化失败。


常见的序列化协议有哪些

   --COM主要用于windows平台,并没有真正实现跨平台,另外COM序列化的原理利用了编译器中虚表,使得其学习成本巨大。

   --CORBA是早期比较好的实现了跨平台,跨语言的序列化协议。CORBA的主要问题是参与方过多带来的版本过多,版本之间的兼容性较差,以及使用复杂晦涩。

   --XML&SOAP

       XML是一种常用的序列化和反序列化协议,具有跨机器,跨语言等优点。

       SOAP(Simple Object Access protocol)是一种被广泛应用的,基于XML为序列化和反序列化协议的结构化消息传递协         议。SOAP具有安全、可扩展、跨语言、跨平台并支持多种传输层协议。

   --JSON(Javascript Object Notation)

      这种Associative array格式非常符合工程师对对象的理解。

      它保持了XML的人眼可读(Human-readable)的优点。

      相对于XML而言,序列化后的数据更加简洁。

      它具备Javascript的先天性支持,所以被广泛应用于Web browser的应用场景中,是Ajax的事实标准协议。

      与XML相比,其协议比较简单,解析速度比较快。

      松散的Associative array使得其具有良好的可扩展性和兼容性。

  




你可能感兴趣的:(笔经面经)