一尘不染

C ++的“最佳”输入文件格式?

json

我正在开始开发新软件,最终将需要一些强大且可扩展的文件IO。有很多格式。XML,JSON,INI等。但是,总会有优缺点,所以我想我会要求社区提供一些意见。

以下是一些基本要求:

  1. 格式是“标准” …如果不需要,我不想重新发明轮子。它不一定是正式的IEEE标准,但是您可以通过Google并以新用户的身份获得一些信息,它可能具有vi之外的一些支持工具(编辑器)。(尽管软件用户通常会精通计算机,并乐于使用vi。)
  2. 轻松与C ++集成。我不想随身携带一个100mb的库和三个不同的编译器来启动和运行它。
  3. 支持表格输入(二维,n维)
  4. 支持POD类型
  5. 可以扩展,因为需要更多的输入,可以很好地绑定到变量等。
  6. 解析速度并不十分重要
  7. 理想情况下,写(反射)和阅读一样容易
  8. 在Windows和Linux上运作良好
  9. 支持合成(一个文件引用另一个文件进行读取,依此类推。)
  10. 人类可读

在理想的情况下,我会使用仅标头的库或一些干净的STL实现,但如果能很好地使用Boost或一些小型外部库,我会很好。

那么,您对各种格式有何看法?缺点?优点?

编辑

选择方案?还有什么要补充的吗?

  • XML格式
  • YAML
  • SQLite的
  • Google协议缓冲区
  • 加速序列化
  • Benigni
  • JSON格式

阅读 350

收藏
2020-07-27

共1个答案

一尘不染

就我的目的而言,我认为要走的路是 XML

  1. 该格式是一种标准,但允许修改和灵活性,以便随着程序需求的发展而更改架构。
  2. 有几个库选项。有些较大(Xerces-C),有些较小(ezxml),但是有很多选择,因此我们不会只限于一个提供程序或非常特定的解决方案。
  3. 它可以支持表格输入(二维,n维)。这需要在“我们的”一端进行更多的解析工作,并且可能是XML的最弱点。
  4. 支持POD类型:绝对。
  5. 可以根据需要的更多输入进行扩展,可以通过模式修改和解析器修改很好地绑定到变量等。
  6. 解析速度并不是很重要,因此处理一个或多个文本文件不是问题。
  7. XML可以以编程方式编写,就像读取一样容易。
  8. 在Windows和Linux或任何其他支持C和文本文件的OS上运行良好。
  9. 支持合成(一个文件引用另一个文件进行读取,依此类推。)
  10. Human Readable具有许多文本编辑器(Sublime,vi等),支持开箱即用地突出显示语法。许多Web浏览器都能很好地显示数据。

感谢您的宝贵意见!我认为,如果我们想要一个纯二进制的解决方案,则可以使用Protocol Buffer或boost :: serialization。

2020-07-27