我的应用程序需要存储大量类似 XML 的分层信息,并满足以下要求:
- 快速阅读
- 最小的内存消耗
- 键入的数据,而不仅仅是文本
对于实现这些目标的二进制格式有什么建议吗?
我的应用程序需要存储大量类似 XML 的分层信息,并满足以下要求:
对于实现这些目标的二进制格式有什么建议吗?
其他应用程序需要读取存储的数据,还是只需要您的?它需要是“标准”格式吗?
Fast Infoset满足要求 (1) 和 (2),尽管因为它只是 XML 信息模型的二进制表示,它与 XML 一样无类型。但是,在没有其他任何东西的情况下,对于您的目的可能已经足够了。
您的要求中的细节太少,无法提供好的建议。例如,您可以自由选择存储介质吗?它会是文件系统、数据库还是其他东西?
“最小内存消耗”是什么意思?您是否在受限平台上运行?您必须与其他应用程序共享资源吗?如果您的计算机有 4GB 内存,那么 1GB 的占用空间是否足够小?您的数据会保存在内存中还是仅保存在您正在处理的部分中?
如果平台是 Java,我会从它的标准序列化开始,如果我对性能不满意,我会研究自定义序列化。
如果格式是可讨论的,我建议使用 JSON,而不是 XML。JSON 实际上比标准 XML 加载和写入更快。
更多关于 JSON 的信息:
http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=060ca7c3-b03f-41aa-937b-c8cba5b7f986 http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=39842a17-781a-45c8 -ade5-58286909226b
您还可以将 XML 读入对象图并存储为 Google 协议缓冲区。这些设计非常有效。
您没有指定 xml 是否是格式要求,您只是说它需要像 xml 一样分层。
如果没有更多关于数据类型的详细信息,很难给你很多建议。所以这里有一个小清单。
维基百科对该问题的解释: http ://en.wikipedia.org/wiki/Binary_XML
据说推荐的组织及其 java 和 .net sdk 可以从以下位置下载: http ://www.agiledelta.com/product_efx.html
xml 是纯文本,但可用于表示序列化对象。假设您的序列化程序正在将您的对象序列化为 xml。
您不应该尝试将您的对象转换为二进制流,因为您必须解决字节序(http://en.wikipedia.org/wiki/Endian)和数据表示问题。但是,如果您坚持,您将需要使用 XDR ( http://en.wikipedia.org/wiki/External_Data_Representation ) 来实现其数据架构中立性。
否则,您应该使用标准序列化程序将您的对象序列化为 XML,然后将 xml 转换为二进制/压缩 xml,因为库和 sdks 的可用性。然后通过从二进制 xml 中解压缩来反序列化。