我们目前使用XStream对XML中的Web服务输入/输出进行编码。然而,我们正在考虑使用代码生成器切换到多种语言(protobuf,Thrift,Hessian等)的二进制格式,以便更容易支持新客户端,减少对手工编码的依赖(同时更好地支持包含二进制数据的消息格式)
然而,服务器上的大多数对象都是POJO,XStream通过反射和注释处理序列化,并且大多数这些库假设它们将自己生成POJO。我可以想到几种方法来连接替代库:
为目标格式编写XStream封送程序。
编写自定义代码,以便将POJO封送到替代库生成的类中/从其中编组。
对生成的类进行子类化以实现POJO逻辑。可能需要一些改写。 (我也提到过我们想用兵马俑?)
使用另一个支持反射(如XStream)和代码生成的库。
但是我不确定哪种serialization library最适合上述技术。
答案 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为中心的消息格式。