我的要求是将 xml 文件压缩为二进制格式,在开始解析它之前传输它并解压缩它(快如闪电)。

有相当多的二进制 xml 协议(protocol)和工具可用。我发现 EXI(高效的 xml 交换)比其他的更好。尝试了它的开源版本Exificient,发现它很好。

我听说过 google protocol buffers 和 facebook 的 thrift,谁能告诉我这两个是否可以完成我正在寻找的工作?

或者让我知道是否有比 EXI 更好的东西我应该寻找。

此外,还有一个很好的 XML 解析器 VTD-XML(我自己没有尝试过,只是在 google 上搜索了一下并阅读了一些文章),与 DOM、SAX 和 Stax 相比,它可以实现更好的解析性能。

我想要两全其美,最好的压缩+最好的解析性能,有什么建议吗?

关于 EXI 的另一件事是,EXI 如何声称能够快速解析解码的 XML 文件?因为它正在被 DOM、SAX 或 STax 解析?如果有另一个二进制解析器用于读取解码版本,我会相信这是真的。如果我错了请纠正我。

另外,有没有好的 EXI 格式的 C++ 开源实现? EXIficient 提供了 java 版本,但我无法找到 C++ 开源实现?

Agile Delta 有一个,但那是商业的。

请您参考如下方法:

你提到了 Protocol Buffer (protobuf);这是一种二进制格式,但与 XML 没有直接关系。特别是,没有对成员名称(元素名称/属性名称/命名空间)进行编码 - 它只是数据(带有标识符的数字标记)。

因此,除非您已经知道如何映射“字段 3”等,否则您无法从 protobuf 流重建任意 XML。

但是!如果您有一个同时使用 XML 和 protobuf 的对象模型,那么转换就很简单了;反序列化与任一 - 序列化与任一。其效果如何取决于实现情况;例如,它对于 protobuf-net 来说很简单,实际上就是我执行代码生成的方式(加载二进制文件;编写为 XML;通过 xslt 层运行 XML 以发出代码)。

如果你实际上只是想传输对象数据(XML只是一个建议的实现细节),那么我强烈推荐protobuf;平台独立、广泛的实现、版本容错、输出非常小、读写处理速度非常快。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!