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对象。
分享到:
相关推荐
学习Java序列化,里面包含一份PPT以及相应的源码演示
java序列化(Serializable)的作用和反序列化.doc 有详细的讲解哦。 在什么地方用的到都有说明的.
java 序列化详细解释 很详细 适用于高级软件开发者
java序列化代码示例,详细讲解序列化作用于使用注意规则项!!!
Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 ...
序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例...虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
大家请看Java的序列化结构有不足的地方请指教也希望指出不足的地方。
java序列化和反序列化java序列化和反序列化java序列化和反序列化
将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...
在应用java进行c-s开发的时候,尤其涉及到图片和视频之间的传输时,需要用序列化和反序列化技术,希望对您有帮助
该资源提供了java常见的三个序列化框架,分别是:JBoss Marshalling,messagePack,protobuf-java
07-Java序列化面试题(10题)-新增
NULL 博文链接:https://hw1287789687.iteye.com/blog/2190768
E043-服务漏洞利用及加固-利用Java序列化漏洞进行渗透测试
java序列化是面试中经常涉及的重要主题之一。对Java序列化的深入了解不仅可以展示你的编程技能,还能体现出你对Java核心概念的掌握。本文精选了20道复杂的Java序列化面试题,并提供了详细的解析,旨在帮助你更好地...
Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化 Java序列化与反序列化
Java序列化机制(2)- serialVersionUID 实验 http://blog.csdn.net/suileisl/article/details/16991753
android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null; b = PHPSerializer.serialize(一个对象);//将一个对象序列化后返回...
详细讲解了java的序列化用处、原理、算法、如何实现。希望能帮到大家。