“最佳"C++ 的输入文件格式?
我正在着手开发一款新软件,该软件最终需要一些强大且可扩展的文件 IO.那里有很多格式.XML、JSON、INI 等.然而,总有优缺点,所以我想我会征求一些社区意见.
I am starting work on a new piece of software that will end up needing some robust and expandable file IO. There are a lot of formats out there. XML, JSON, INI, etc. However, there are always plusses and minuses so I thought I would ask for some community input.
以下是一些粗略的要求:
Here are some rough requirements:
- 格式是标准"...如果不需要,我不想重新发明轮子.它不一定是正式的 IEEE 标准,但作为新用户,您可以通过谷歌搜索并获取一些信息,可能有一些超出 vi 的支持工具(编辑器).(尽管软件用户通常会精通计算机并乐于使用 vi.)
- 与 C++ 轻松集成.我不想使用 100mb 的库和三个不同的编译器来启动和运行它.
- 支持表格输入(2d、n 维)
- 支持 POD 类型
- 可以在需要更多输入时扩展,很好地绑定到变量等.
- 解析速度并不是很重要
- 理想情况下,写(反映)和读一样容易
- 在 Windows 和 Linux 上运行良好
- 支持合成(一个文件引用另一个要读取的文件,依此类推.)
- 人类可读
在一个完美的世界里,我会使用一个只有头文件的库或一些干净的 STL 实现,但如果它运行良好,我可以使用 Boost 或一些小型外部库.
In a perfect world, I would use a header-only library or some clean STL implementation, but I'm fine with leveraging Boost or some small external library if it works well.
那么,您对各种格式有何看法?缺点?优势?
So, what are your thoughts on various formats? Drawbacks? Advantages?
编辑
要考虑的选项?还有什么要补充的吗?
Options to consider? Anything else to add?
- XML
- YAML
- SQLite
- Google 协议缓冲区
- 提升序列化
- INI
- JSON
推荐答案
就我而言,我认为要走的路是 XML.
For my purposes, I think the way to go is XML.
- 格式是一种标准,但允许对架构进行修改和灵活调整,以便随着程序需求的发展而变化.
- 有几个库选项.有些较大 (Xerces-C) 有些较小 (ezxml),但有很多选择,因此我们不会局限于单一提供商或非常具体的解决方案.
- 它可以支持表格输入(2d,n维).这需要在我们的"端进行更多的解析工作,这可能是 XML 的最薄弱环节.
- 支持 POD 类型:绝对支持.
- 可以在需要更多输入时进行扩展,通过架构修改和解析器修改很好地绑定到变量等.
- 解析速度并不是很重要,因此处理一个或多个文本文件不是问题.
- XML 可以通过编程方式编写,就像阅读一样容易.
- 在 Windows 和 Linux 或任何其他支持 C 和文本文件的操作系统上运行良好.
- 支持合成(一个文件引用另一个要读取的文件,依此类推.)
- 人类可读的许多文本编辑器(Sublime、vi 等)支持开箱即用的语法高亮显示.许多网络浏览器都能很好地显示数据.
感谢大家的好评!我认为如果我们想要一个纯粹的二进制解决方案,Protocol Buffers 或 boost::serialization 可能是我们应该采用的方式.
Thanks for all the great feedback! I think if we wanted a purely binary solution, Protocol Buffers or boost::serialization is likely the way that we would go.
相关文章