有一种出色的格式可以满足您的所有标准:
SQLite!
请阅读有关使用 SQLite 作为应用程序文件格式的文章。另外,请观看D. Richard Hipp(SQLite 作者)关于这个主题的 Google 技术讲座。
现在,让我们看看 SQLite 如何满足您的要求:
格式是“标准”
SQLite 已成为大多数移动环境和许多桌面应用程序(Firefox、Thunderbird、Google Chrome、Adobe Reader 等等)的首选格式。
与 C++ 轻松集成
SQLite 有标准的 C 接口,只有一个源文件和一个头文件。也有C++ 包装器。
支持表格输入(2d,n 维)
SQLite 表就像你想象的那样是表格的。要表示 3 维数据,请创建包含列的表x,y,z,value
并将数据存储为一组行,如下所示:
x1,y1,z1,value1
x2,y2,z2,value2
...
支持 POD 类型
我假设 POD 是指普通旧数据或 BLOB。SQLite 允许您按原样存储 BLOB 字段。
可以根据需要扩展更多输入,很好地绑定到变量
这是它真正闪耀的地方。
解析速度并不是很重要
但是 SQLite 的速度非常棒。其实解析基本上是透明的。
理想情况下,写(反映)和读一样容易
只是INSERT
用来写和SELECT
读——还有什么比这更容易的呢?
在 Windows 和 Linux 上运行良好
你打赌,所有其他平台也是如此。
支持合成(一个文件引用另一个文件读取)
您可以将一个数据库附加到另一个数据库。
人类可读
不是二进制的,但是有很多优秀的 SQLite 浏览器/编辑器。我喜欢Windows上的SQLite Expert Personal和 Linux 上的sqliteman。还有用于 Firefox 的 SQLite 编辑器插件。
SQLite 还免费为您提供了其他优势:
数据是可索引的,这使得搜索速度非常快。您不能使用 XML、JSON 或任何其他纯文本格式来执行此操作。
即使数据量很大,也可以对数据进行部分编辑。您不必为了编辑一个值而重写几千兆字节。
SQLite 是完全事务性的:它保证你的数据在任何时候都是一致的。即使您的应用程序(或整台计算机)崩溃,您的数据也会在下次首次尝试连接到数据库时自动恢复到上次已知的一致状态。
SQLite逐字存储您的数据:您无需担心转义数据中的垃圾字符(包括嵌入在字符串中的零字节) - 只需始终使用准备好的语句,这就是使其透明所需的全部内容。在处理文本数据格式(尤其是 XML)时,这可能是一个大而烦人的问题。
SQLite 以Unicode存储所有字符串:(UTF-8
默认)或UTF-16
. 换句话说,您无需担心数据格式的文本编码或国际支持。
SQLite 允许您以小块(实际上是逐行)处理数据,因此它在低内存条件下运行良好。这对于任何基于文本的格式都是一个问题,因为它们通常需要将所有文本加载到内存中来解析它。诚然,市面上很少有高效的基于流的 XML 解析器,但一般来说,任何 XML 解析器与 SQLite 相比都会非常占用内存。