基于XSD的二进制序列化

时间:2019-09-15 05:00:12

标签: java serialization xsd binary-serialization

您好,我正在寻找Java的二进制序列化: -使用xsd进行架构 -输出很小的字节流 -字节流不应包含字段名称和数据类型 -应该像可能的gor jaxb一样生成pojos -很高兴:植入Java脚本

有人知道解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是XSD模式,通常的期望是您将序列化到XML或从XML序列化。那不是一个很小的字节流。纯文本在表示二进制数据(整数,浮点数等)方面效率很低。

但是有一个选项。 XSD架构和ASN.1架构或多或少是可互换的。国际电联定义的两者之间甚至还有官方翻译。有可以在两者之间转换的工具。

为什么这样有意义?好吧,有了ASN.1,您就可以使用各种不同的电线格式。有很多二进制文件和文本文件(包括,是的,XML和JSON)。重要的是二进制文件之一是uPER(未对齐的打包编码规则),它将使用最少的位来表示要发送的数据。

例如,假设您有一个带有整数字段的类,并且将其值限制在0到7之间。uPER将仅对该字段使用3位。

您可以拥有的XSD模式是:i)转换为ASN.1并由ASN.1编译器(OSS)编译,或ii)由ASN.1编译器(Obj-Sys)直接编译,产生Java可以从ASN.1的uPER线格式(和其他所有二进制格式,以及XML和JSON)进行序列化的POJO类,这取决于ASN.1编译器的使用方式。这与jaxb / xjc相似。

我在上一段中建议的工具需要AFAIK,Objective Systems(obj-sys.com)或OSS Nokalva(www.oss.com)的ASN.1专有编译器和工具,并且不免费(nb我一直都是两者的客户,没有与之相关联)。我认为有一个免费的XSD <-> ASN1模式在线转换器,并且有一些免费的ASN1编译器(尽管它们通常针对C,而不是Java)。

链接:OSS's XSD translatorObjective System's Compiler reference for XSD translationOSS Java supportObj-Sys's Java support

答案 1 :(得分:0)

对XSD,ASN.1等一无所知,还有其他可能有用的选项,但可能意味着删除XSD架构并使用其他选项。

Google协议缓冲区

Google协议缓冲区有Java(以及其他负载)绑定,GBP线格式为二进制。它的数据大小不如ASN.1的uPER好,但肯定小于XML文本。参见here。它具有自己的模式语言,据我所知,XSD和GPB之间没有翻译器。

Capn Proto

另一个有趣的选项(请参见此project),也是二进制格式。它的大小并不会超过uPER,但是序列化/反序列化的速度很快(或者至少是在C / C ++中)。同样,我知道它的模式语言和XSD之间没有翻译。

相关问题