字符串与二进制文件用于在文件格式中存储变量

时间:2015-06-22 11:55:47

标签: c++ file hdf5 dataformat

我们的目标是将HDF5用于我们的数据格式。选择HDF5是因为它是一种类似分层文件系统的跨平台数据格式,它支持大量数据。

该文件将包含数组和一些参数。问题是如何存储参数(不是由大量数据组成),还要考虑文件版本问题以及构建库的工作。 HDF5内的参数可以存储为(A)人类可读的属性/值对或(B)HDF5复合数据类型形式的二进制数据。

作为一个例子,让我们将具有三个顶点的多边形视为参数。在情况A下,我们可以得到一个名为Polygon的变量,其中包含一系列顶点的字符串表示,例如:例如(1, 2); (3, 4); (4, 1)。在案例B下,我们可以使用由[2 x 3]矩阵组成的名为Polygon的变量。

我们有一些想法,但是从那些已经使用类似东西的人那里获得投入会很棒。更准确地说,您能否列出A和B的优点/缺点,并说明哪种情况更可取?

2 个答案:

答案 0 :(得分:3)

作为一个必须完成你正在谈论的事情的人来说,rr基本上是正确的,但我会稍微改变一下。

  • 对于文件版本控制,文本基本上是赢家。
  • 由于您使用的是hdf5库,我认为序列化和解析都是等效的人力。
  • 文本文件更具可移植性。您可以以最小的风险在几代硬件之间传输文件。
  • 文本文件更易于人类使用。如果要提取数据的子集并对其进行操作,可以在许多计算机上使用许多程序执行此操作。如果您正在使用二进制数据,则需要一个允许您这样做的程序。根据您对使用数据的人员的看法,这可能会对数据的可访问性和维护成本产生巨大影响。您将能够在Excel中进行sed,grep甚至编辑数据。

  • 二进制数据(对于大型数据集)的输入和输出将比文本快得多。

  • 在新的环境中使用这些二进制文件(例如,在某些科幻未来的128位小端计算机中)将需要一些工程。
  • 同样,如果您使用其他语言编写应用程序,则需要在应用程序之间以相同方式处理编码。这将意味着工程工作,或者在所有平台上都可以使用相同的库。纯文本这更容易......
  • 如果您希望其他人编写适用于您的数据的应用程序,则纯文本会更简单。如果您要提供二进制文件,则必须提供可以遵循的文件规范。使用纯文本,任何人都可以查看文件并找出如何解析它。
  • 您可以使用压缩归档文本文件,因此空间问题主要是您正在使用的数据的问题。
  • 调试二进制数据存储比调试纯文本存储要多得多。

所以最后它取决于你的用例。查看处理纯文本的无数工具中的数据是否有意义?用大数据hdf5观众来看它是否有意义?在时间和空间方面,写明文是否会给你带来麻烦?

一般来说,当我遇到这个问题时,我基本上总是做同样的事情:我用纯文本存储数据,直到我意识到速度问题比使用二进制文件更令人恼火,然后我切换。如果您事先并不知道是否超过该阈值,请使用纯文本,并将您的界面写入持久层,以便以后轻松切换。这是一些额外的工作,由于简单的文本更易于调试,您可能会回来。

答案 1 :(得分:2)

如果您希望经常手动编辑文件(如XML或JSON),那么请使用人类可读的格式。

否则使用二进制文件 - 为它创建解析器要容易得多,并且运行速度比任何语法解析器都快。

另请注意,以后如何阻止您在二进制和人类可读形式之间创建转换器。

版本控制文件可能听起来不错,但你真的要检查文件的差异吗?#34;包含大型数组"?