您好,我正在寻找Java的二进制序列化: -使用xsd进行架构 -输出很小的字节流 -字节流不应包含字段名称和数据类型 -应该像可能的gor jaxb一样生成pojos -很高兴:植入Java脚本
有人知道解决方案吗?
答案 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 translator,Objective System's Compiler reference for XSD translation,OSS Java support,Obj-Sys's Java support
答案 1 :(得分:0)