关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 7618|回复: 0

java 序列化

[复制链接]
发表于 2015-3-6 16:20:48 | 显示全部楼层 |阅读模式
  java序列化,是把对象序列化成流,转成流的目的是为了网络传输。

  在什么场合要网络传输java对象呢?

  我大概总结了两种:java对象持久化,java对象远程服务调用。

  java对象持久化,如redis缓存服务,把对象序列化到redis内存服务器中,持久到内存。

  java对象远程服务调用,例如RMI。当然也可以用mina或者netty建立网络连接,自己定义序列化与反序列操作。

  这里想提的一个问题是序列化对象还是序列字符串?

  这个问题具体是,例如远程服务调用,把处理结果封装成一个对象,然后序列化给client,还是把处理结果转成xml/json字符串再返回给客户端。

  其实在java当中,String类也是一个对象,而且查看JDK源码,它本身也实现了java.io.Serializable接口,同样java的八个基本类型,同样也实现了java.io.Serializable接口。

  其实这个选择是值到考虑的。

  列举XML/JSON字符串格式的优缺点

  优点:

  1.一般不会发生序列化的异常,相比较要序列化对象,网络传输的对象都要实现java.io.Serializable接口,而且某些开源序列化代码不能保证对象序列化的正确性,如Hessian.

  2.不用考虑serialVersionUID变更带来的影响。

  3.返回内容很复杂,并非由一个对象直接转成JSON或者XML,那么用JSON/XML工具类可以动态的扩展。

  4。客户端拿到字符串可以用格式化工具(浏览器一般都会有对JSON,XML)清晰的显示。

  缺点:

  最主要的是客户端需要解析XML/JSON,要明白字符串的结构。

  相对对象的优缺点:

  与XML/JSON正好相对。

  优点:通过serialVersionUID可以有比较良好的版本控制。调用方直接拿到对象,不需要二次处理。

  笔者感觉:

  对外服务,不是平台内部调用,采用XML/JSON这种方式,而且是发部HTTP服务,而且不是甚于socket的服务调用。原因是外部调用有不可预期性,调用者过多,socket连接成本过高,而且耦合性也太高。在采用XML/JSON的场合,建立可以提供一些解析工具类,方便客户端拿到字符串转成java对象。而且client调用也比较方便。

  平台系统间,模块间的相互调用可以采用序列化对象的方式。

  第二个问题。

  序列化的性能考虑:

  笔者主要相到两个方面,decode,encode的效率,网络传输成本。

  具体生成序列化的字节码效率,以及生成字节码的大小。在网络带宽相同的场合,网络传输的量越小越好。

  所以用JDK,CGLIB, JAVAASSIST ,JAVAASSIST Bytecode , ASM Bytecode ,hessian做了测试。

  这些开源框架都可以序列化java对象。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表