分布式应用系统中,系统之间的通讯的质量决定了系统的可用性,当然很多可以选择的技术:XML-RPC,RMI,SOAP,CORBA,JMS,EJB,NIO等。在传输数据的过程中,数据包越小,占用的带宽就越少,同等条件下资源利用就会越小。目前基于SOA的ESB系统中,很多采用NIO来传输数据,就涉及到对象的序列化的问题。
本文主要讨论jdk自带序列化,hessian,Google的protobuf之间的性能比较,主要指标有以下三个:(执行序列化测试1次;1个数据对象,100个,1000个)
- 序列化文件大小
- 序列化的读取读取性能
- 序列化的平均写入性能
性能指标结果(纵坐标为耗时)
文件大小:hessian最小,传输带宽方面占有优势。
写操作:写操作在大批量的时候,protobuf比hessian和jdk有优势。
读操作:读取方面protobuf仍然占有优势,但是总体上来书,hessian和protobuf差距不大。
性能外的问题:
1:易用性:hessian比protobuf使用起来要简单的多,google需要预先生成一个*.proto文件,使用的时候需要依赖它的build接口,和GAE中的web.py的模板文件一样,预处理真是方便的框架,并没有让用户觉得爽。这方面hessian占优势。
2:学习成本:老牌hessian在java平台上广结良缘,文档和FAQ相当齐全,学习成本相对较低。google搜索protobuf google显示21.1W条,而hessian java却有54.4W条。
3:跨平台:hessian支持的语言:java,c++,python,php,erlang,ruby等,主要是针对java平台的,C++版本是05年的和python版本是07年的,更新都较慢;protobuf这块做的就比较好,如果系统中需要不同语言的就选择protobuf了,单java语言的还是选择hessian比较好。
其他方面的知识:
二进制协议比基于xml协议(Burlap和apache XML-RPC)的效率要高的多(ORMI的HTTP隧道启用除外),XML-RPC经过测试无论是文件大小和速度都没有优势。
相关推荐
在Java中,如果一个类实现了Serializable接口,那么该类的对象就可以被序列化。序列化的目的是为了保存对象的状态以便后续使用或在网络上传输。 Hessian,由Caucho Technology开发,是一种二进制的序列化格式。相比...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...
本文将深入探讨两种主要的序列化方式:Serializable和Parcelable,并比较它们的优缺点以及适用场景。 首先,我们来了解什么是序列化。序列化是将对象的状态转换为可存储或可传输的形式的过程。在Android中,这个...
### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...
14. **Java序列化与JSON序列化比较**: - Java序列化:针对Java对象,字节流形式。 - JSON序列化:文本形式,跨语言跨平台。 15. **禁止类序列化**: - 在类定义中添加`transient`关键字。 16. **自定义序列化...
### Java序列化(Serializable)与反序列化详解 #### 序列化概念与应用场景 序列化是指将程序中的对象转换为一系列字节序列的过程,主要用于保存对象的状态以便将来使用或者在网络之间传输对象。Java提供了内置的...
Java序列化(Serializable)是Java平台提供的一种持久化机制,允许将对象的状态转换为字节流,以便存储到磁盘、数据库中,或者在网络上传输。这一过程被称为对象的序列化。反之,将字节流恢复为原来的对象状态称为反...
【S25-Hessian反序列化1】是一个关于Java中Hessian序列化库的讨论,主要涉及Hessian与原生Java序列化的差异以及在Spring框架中的应用。Hessian是一种二进制序列化协议,旨在提高远程过程调用(RPC)的效率。与原生Java...
在Java类定义中,只需添加`implements Serializable`即可实现序列化。例如: ```java public class MyClass implements Serializable { private int id; private String name; // ... } ``` **序列化标识符:...
1. **标记类**:在需要序列化的类上添加`[Serializable]`属性,并在成员变量上添加`[ProtoMember(n)]`,其中n是字段编号,用于识别每个成员。 2. **创建Serializer实例**:`var serializer = new ProtoBuf....
在Java编程语言中,序列化(Serializable)是一个关键特性,它允许对象的状态被持久化到磁盘上,或者在网络中进行传输。这个过程涉及到将一个对象转换为字节流,以便存储或传输,然后可以将这个字节流恢复为原始的...
`Serializable`接口是Java提供的一个标记接口,用于实现对象的序列化。当一个类实现了这个接口,它的实例就可以被序列化。 **一、Java序列化** 1. **什么是序列化**:序列化是将对象的状态(属性和成员变量)转换...
2. **自定义序列化**:通过实现Externalizable接口,自定义序列化和反序列化逻辑,适合需要优化性能或有特殊需求的场景。 3. **序列化过滤**:使用`transient`关键字忽略不想序列化的字段,或使用`@serialData`注解...
和好友一起总结了C#的四种对象序列化方法(DataContractSerializer、XmlSerializer、BinaryFormatter、SoapFormatter),其中有DataContractSerializer和XmlSerializer不需要在对象上标注[Serializable],...
首先,`Serializable`接口是Java中用于实现序列化的标志接口。它没有定义任何方法,但当一个类实现了这个接口,Java的ObjectOutputStream就可以将该类的对象写入到流中。例如,`MySerializable.java`和`Product.java...
Java序列化是Java平台提供的一种持久化机制,它允许将对象的状态转换为字节流,以便存储到磁盘、数据库中或通过网络进行传输。序列化对于数据存储、跨网络对象传输以及远程方法调用(RMI)等场景非常有用。 1. **...
在JavaScript中,序列化(Serialization)和反序列化(Unserialization)是两个关键概念,用于将数据对象转换为可传输的字符串格式,以及将这种字符串还原回原始对象。这一过程在许多场景下都非常有用,例如在存储...
1. 性能:Parcelable的序列化和反序列化速度远超Serializable,适合处理大量数据或者频繁操作的情况。 2. 内存占用:Parcelable占用的内存资源较少,特别是在序列化大型对象时。 3. 使用难度:Serializable接口只需...
在C#编程中,序列化和反序列化是两个关键的概念,它们对于数据存储、网络传输和持久化具有重要作用。序列化是指将对象的状态转换为可存储或传输的形式,如XML、JSON或二进制流;反序列化则是将这些形式的数据恢复为...
"java原生序列化和Kryo序列化性能实例对比分析" 本文主要介绍了java原生序列化和Kryo序列化性能实例对比分析,涉及Java和kryo序列化和反序列化相关实例。下面是对标题、描述、标签和部分内容的详细说明: 1. 序列...