关于C#:将不同大小的struct写入二进制文件并读取

Write struct with different sizes into binary file and read it

如果您使用过 postgresql,您可能知道它在内部视图中存储各种统计信息。我想以一定的间隔获取统计信息并将其存储到二进制文件中。我通过以下方式看到它:

  • 使用 PQexec() 从 libpq 读取统计信息。
  • 使用结果中有关行数和列数的信息,分配一个 3d 指针数组。
  • 将结果放入 3d 数组(它已经是结构的一部分)
  • 将具有 3d 数组的结构写入二进制文件
  • 转到步骤 1 并重复
  • 接下来,可以读取这个二进制文件,将struct读入类似的3d数组,然后对值进行排序,查看等等。

    一切看起来都很好,直到行数保持不变,但在 postgresql 中,有一些视图会永久更改行数。因此,写入结构的大小总是不同的,我不知道如何从文件中正确读取这些结构(因为我需要知道结构的大小)。

    您能给我建议或提出更好的方法吗?


    基本上你需要采用一种文件格式。像这样的最基本格式是先写入大小,然后再写入数据。然后读取器会读取大小,分配内存,然后读取数据。


    您将需要 TLV 的变体 a€" Type, Length, Value a€" 编码。您存储(固定大小)有关接下来出现的可变长度数据的信息。读取时,您读取固定大小的信息并使用它来分配正确的空间来读取后面的数据。