C++ &引用;“最佳”;C+的输入文件格式+;?
我正在着手开发一款新的软件,最终需要一些健壮且可扩展的文件IO。有很多格式。XML、JSON、INI等等。然而,总是有优缺点,所以我想我会要求一些社区的意见 以下是一些粗略的要求:C++ &引用;“最佳”;C+的输入文件格式+;?,c++,json,sqlite,xml-parsing,file-format,C++,Json,Sqlite,Xml Parsing,File Format,我正在着手开发一款新的软件,最终需要一些健壮且可扩展的文件IO。有很多格式。XML、JSON、INI等等。然而,总是有优缺点,所以我想我会要求一些社区的意见 以下是一些粗略的要求: 格式是一个“标准”…如果不需要的话,我不想重新发明轮子。它不一定是一个正式的IEEE标准,但是作为一个新用户,你可以在谷歌上搜索并获得一些关于它的信息,它可能有一些vi以外的支持工具(编辑器)(尽管软件用户通常会精通计算机并乐于使用vi) 容易与C++集成。我不想用一个100mb的库和三个不同的编译器来启动和运行它
- XML
- 亚马尔
- SQLite
- 谷歌协议缓冲区
- 推进序列化
- 伊尼
- JSON
使用协议缓冲区编译器。
使用C++协议缓冲API编写和读取消息。 < P>有一个符合您所有标准的优秀格式: SQLite! 请阅读有关使用SQLite作为应用程序文件格式的信息。另外,请参见D.Richard Hipp(SQLite作者)关于这个主题的文章 现在,让我们看看SQLite如何满足您的需求: 格式为“标准” SQLite已成为大多数移动环境和许多桌面应用程序(Firefox、Thunderbird、Google Chrome、Adobe Reader,随便你说)的首选格式 轻松与C++集成 SQLite有,这只是一个源文件和一个头文件。有 支持表格输入(2d、n维) SQLite表是您可能想象得到的表格形式。要表示三维数据,请创建包含列
x、y、z、value
的表,并将数据存储为一组行,如下所示:
x1,y1,z1,value1
x2,y2,z2,value2
...
支持吊舱类型
我猜POD是指普通的旧数据,或BLOB。SQLite允许按原样存储BLOB字段
可以随着需要更多输入而扩展,与变量绑定良好
这是它真正闪耀的地方
解析速度并不十分重要
但是SQLite的速度非常好。事实上,解析基本上是透明的
理想情况下,写(反映)和读一样容易
只需使用INSERT
进行写入,然后使用SELECT
进行读取-有什么更简单的方法
在Windows和Linux上运行良好
当然,还有所有其他平台
支持合成(一个文件引用另一个要读取的文件)
可以将一个数据库连接到另一个数据库
人类可读性
不是二进制的,但是有很多优秀的SQLite浏览器/编辑器。我喜欢Windows和Linux。还有
SQLite还免费为您提供了其他优势:
- 数据是可索引的,这使得搜索速度非常快。使用XML、JSON或任何其他纯文本格式都无法做到这一点
- 即使数据量非常大,也可以部分编辑数据。您不必仅为了编辑一个值而重写几GB
- SQLite完全是事务性的:它保证您的数据在任何时候都是一致的。即使您的应用程序(或整个计算机)崩溃,您的数据也将在下次首次尝试连接到数据库时自动恢复到上次已知的一致状态
- SQLite一字不差地存储您的数据:您不必担心转义数据中的垃圾字符(包括嵌入字符串中的零字节)-只需始终使用即可,这就是使数据透明的全部条件。在处理文本数据格式(尤其是XML)时,这可能是一个大而恼人的问题
- SQLite将所有字符串存储为Unicode:
(默认)或UTF-8
。换句话说,您不需要担心文本编码或数据格式的国际支持UTF-16
- SQLite允许您以小块(事实上是逐行)的方式处理数据,因此它在低内存条件下运行良好。这对于任何基于文本的格式来说都可能是一个问题,因为它们通常需要将所有文本加载到内存中来解析它。诚然,很少有高效的基于流的XML解析器,但一般来说,与SQLite相比,任何XML解析器都会非常占用内存
- 格式是“标准”:两者都是
- 易于与C++集成:两者都可以。在每种情况下,您都可能会得到某种库来处理它。在Linux上,libxml2是一个stan