XStream< - >替代二进制格式(例如协议缓冲区)

时间:2010-03-16 18:09:19

标签: serialization xml-serialization protocol-buffers xstream thrift

我们目前使用XStream对XML中的Web服务输入/输出进行编码。然而,我们正在考虑使用代码生成器切换到多种语言(protobuf,Thrift,Hessian等)的二进制格式,以便更容易支持新客户端,减少对手工编码的依赖(同时更好地支持包含二进制数据的消息格式)

然而,服务器上的大多数对象都是POJO,XStream通过反射和注释处理序列化,并且大多数这些库假设它们将自己生成POJO。我可以想到几种方法来连接替代库:

  1. 为目标格式编写XStream封送程序。

  2. 编写自定义代码,以便将POJO封送到替代库生成的类中/从其中编组。

  3. 对生成的类进行子类化以实现POJO逻辑。可能需要一些改写。 (我也提到过我们想用兵马俑?)

  4. 使用另一个支持反射(如XStream)和代码生成的库。

  5. 但是我不确定哪种serialization library最适合上述技术。

1 个答案:

答案 0 :(得分:1)

(1)可能 很多工作,因为许多序列化库包含一个知道如何读/写原始值和分隔符的辅助API。

(2)可能为您提供最广泛的工具选择:https://github.com/eishay/jvm-serializers/wiki/ToolBehavior(有些是与语言无关的)。有缺陷但有希望不是完全没用的基准:https://github.com/eishay/jvm-serializers/wiki

这些工具中的许多都会生成类,这需要编写代码来转换为POJO或从POJO转换。直接使用POJO的工具通常不是与语言无关的。

(3)似乎是个坏主意(对你的具体项目一无所知)。我通常保持我的消息类没有任何其他逻辑。

(4)Protostuff library(支持协议缓冲区格式)允许您write a "schema"描述您希望如何序列化POJO。但是编写这个模式可能最终会产生更多的工作并且更容易出错,而不仅仅是编写代码来在POJO和某些工具生成的类之间进行转换。

Protostuff也可以automatically generate a schema通过反射,但这可能会产生一种感觉有点以Java为中心的消息格式。