Java序列化技术与Protobuff.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java序列化技术与Protobuff

Java序列化技术与Protobuff 前言: ? ? ? ?Java序列化是Java技术体系当中的一个重要议题,序列化的意义在于信息的交换和存储,通常会和io、持久化、rmi技术有关(eg:一些orm框架会要求持久化的对象类型实现Serializable接口)。 ? ? ? ?本文将提供Java自带序列化机制和ProtoStuff的序列化(仅仅当作一种数据格式)的比较,从序列化的内容和特点来对二者进行比较。 ? ? ? ?结论:1,Java序列化对象时不需要通过属性的get set方法或其它无关序列化内部定义的方法(比如readObject,writeObject是内置的序列化方法),序列化也不需要get set方法支持,反序列化是构造对象的一种手段。 ? ? ? ? ? ? ? ?2,Java序列化时类型必须完全匹配(全路径类名+序列化id)。 ? ? ? ? ? ? ? ?3,Protostuff反序列化时并不要求类型匹配,比如包名、类名甚至是字段名,它仅仅需要序列化类型A 和反序列化类型B 的字段类型可转换(比如int可以转换为long)即可。 ? java.io.Serializable ? ? ? ?标识一个对象需要系列化,该对象类型需要实现 Serializable 接口。关于序列化的认识,可以参考IBM社区的文章《 HYPERLINK /developerworks/cn/java/j-lo-serial/ \t _blank Java序列化的高级认识》,本文直接拿该文档的结论。 ? ? ? ?1,序列化的类型和反序列化的类型的序列化ID必须一致(远程信息交换时)。 ? ? ? ?2,静态数据不会被序列化,Transient关键字修饰的字段不会被序列化。 ? ? ? ?3,对象序列化存储时,两次存储相同值对象会有优化(第二次对象写入会只存储引用)。 序列化技术 ? ? ? 序列化的目的是进行数据存储和交换,依据这个概念,xml,json也是一种序列化的技术,只是他们似乎是一种容易分辨的序列化技术,而类似于protostuff或Java自身的序列化技术似乎略神秘。 ? ? ? 那么,Java序列化技术与其它的序列化技术究竟有什么不同呢?下文将比较Java自身的序列化技术和protostuff做比较,窥探一二。 Protostuff ? ? ?官网: HYPERLINK /p/protostuff/ \t _blank /p/protostuff/。 ? ? ?Protostuff是基于大名鼎鼎的Google protobuff技术的Java版本,直接使用原生的protobuff是需要数据结构的预编译过程,需要编写.proto格式的配置文件,再通过protobuf提供的工具翻译成目标语言代码,而Protostuff动态支持了protobuff的预编译的过程。 ? ?? 下面的示例代码用于证明前言提出的结论 ? ? ?1,用于测试的实体(中括号内代表属性) ? ? ?org.wit.ff.testmodel.SerializableUserA[String name, int age]; ? ? ?org.wit.ff.testmodel.SerializableUserB[String name, int age]; ? ? ?org.wit.ff.testmodel.ch.SerializableUserA[String name, int age]; ? ? ?org.wit.ff.testmodel.ch.SerializableUserC[String noneName, double noneAge]; ? ? ?org.wit.ff.testmodel.ch1.SerializableUserA[String name, int age, String firstName]; ? ? ?org.wit.ff.testmodel.ch1.SerializableUserB[String noneName, int noneAge]; ? ? ?org.wit.ff.testmodel.ch1.SerializableUserC[String noneName, int noneAge]; ? ? ?2,测试用例: package org.wit.ff; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue;

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档