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使得其具有良好的可扩展性和兼容性。

  




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值