【发布时间】:2013-01-19 22:12:16
【问题描述】:
我正在着手开发一款新软件,该软件最终需要一些强大且可扩展的文件 IO。那里有很多格式。 XML、JSON、INI 等。然而,总有优缺点,所以我想我会征求一些社区意见。
以下是一些粗略的要求:
- 格式是“标准”...如果我不需要,我不想重新发明轮子。它不一定是正式的 IEEE 标准,但作为新用户,您可以通过谷歌搜索并获取一些信息,可能有一些超出 vi 的支持工具(编辑器)。 (尽管软件用户通常会精通计算机并乐于使用 vi。)
- 与 C++ 轻松集成。我不想使用 100mb 的库和三个不同的编译器来启动和运行它。
- 支持表格输入(二维、n 维)
- 支持 POD 类型
- 可以在需要更多输入时进行扩展,很好地绑定到变量等。
- 解析速度并不是很重要
- 理想情况下,写(反映)和读一样容易
- 在 Windows 和 Linux 上运行良好
- 支持合成(一个文件引用另一个要读取的文件,依此类推。)
- 人类可读
在一个完美的世界里,我会使用一个仅包含标头的库或一些干净的 STL 实现,但如果它运行良好,我可以使用 Boost 或一些小型外部库。
那么,您对各种格式有何看法?缺点?优势?
编辑
要考虑的选项?还有什么要补充的吗?
- XML
- YAML
- SQLite
- Google 协议缓冲区
- Boost 序列化
- INI
- JSON
【问题讨论】:
-
您要表示什么类型的数据?仅限英语,还是 i18n 有问题?有一个紧凑的表示有多重要?需要与其他语言互操作?
-
对于文本格式:XML - with 适当的库。 INI 在层次/维度数据和 JSON 上失败了,虽然从 JavaScript 中使用起来非常好,但缺少一些好的特性和 XML 工具。
-
C++ 不直接支持结构化文件。您总是需要一段代码来解析或生成比纯二进制或文本文件更复杂的东西。 XML/JSON 是一个不错的选择,您可以通过赋予事物特殊含义来扩展它们。但是,您必须意识到,当您拥有大量数据时,任何格式在纯文本编辑器中的可读性都会变得很差。
-
@vonbrand - 是的。仅限英语。数据将是配置数据,但本质上主要是数字。最复杂的数据是大约 1024x1024x1024 元素的表格。
-
INI 的一些变体也许就足够了?取决于数据结构的复杂程度...
标签: c++ json sqlite xml-parsing file-format