我的应用程序需要存储大量类似XML的层次结构信息,并满足以下要求:
对满足这些目标的二进制格式有任何建议吗?
答案 0 :(得分:1)
其他应用程序是否需要读取存储的数据,或者只读取您的数据?它需要是“标准”格式吗?
Fast Infoset符合要求(1)和(2),尽管因为它只是XML信息模型的二进制表示,所以它与XML一样无类型。但是,在没有任何其他目的的情况下,可能足以满足您的目的。
答案 1 :(得分:1)
您的要求中没有太多细节可以提供好的建议。例如,您可以自由选择存储介质吗?它是文件系统,数据库还是别的什么?
“最低内存消耗”是什么意思?你在受限制的平台上运行吗?您必须与其他应用程序共享资源吗?如果您的计算机有4GB内存,1GB的占用空间是否足够小?您的数据会留在内存中还是仅存在于您正在处理的部分中?
如果该平台是Java,我将从其标准序列化开始,然后如果我对性能不满意则调查自定义序列化。
答案 2 :(得分:1)
如果格式是可讨论的,我建议使用JSON,而不是XML。与标准XML相比,JSON实际上更快地加载和写入。
有关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
答案 3 :(得分:1)
您还可以将XML读入对象图并存储为Google Protocol Buffers。这些设计非常有效。
答案 4 :(得分:1)
您没有指定xml是否是格式要求,您只需说它需要像xml一样分层。
如果没有关于数据类型的更多细节,很难给出很多建议。所以这是一个小清单。
答案 5 :(得分:1)
维基百科对此问题的解释: http://en.wikipedia.org/wiki/Binary_XML
据推测,推荐的组织及其java和.net sdk可以从以下网址下载: http://www.agiledelta.com/product_efx.html
xml是纯文本,但可用于表示序列化对象。 我们假设你的序列化器将你的对象序列化为xml。
您不应该尝试将对象转换为二进制流,因为您必须解决endian(http://en.wikipedia.org/wiki/Endian)和数据表示问题。但是,如果您坚持,则需要使用XDR(http://en.wikipedia.org/wiki/External_Data_Representation)来实现其数据架构中立性。
否则,您应该使用标准序列化器将对象序列化为XML,然后将xml转换为binary / compact xml,因为库和sdks的可用性。然后通过从二进制xml中解压缩来反序列化。