在不知道流的长度的情况下将多个流写入单个文件?

时间:2011-09-06 21:48:19

标签: file-io compression san

为了读取和写入大型数据集,我们有多个线程压缩和写出单独的文件到SAN。我正在制作一个新的文件规范,将所有这些文件附加到一个文件中。我将把这些较小的数据块中的每一个称为子集。

由于每个子集在压缩后都是未知大小,因此无法知道要写入的字节偏移量。如果没有压缩,每个编写器都可以写入可预测的地址。

有没有办法在文件系统级别附加文件而无需文件副本?

我将在这里写一个例子,说明我希望结果如何在磁盘上。虽然我不确定以这种方式写它有多大帮助。

single-dataset.raw
[header 512B][data1-45MB][data2-123MB][data3-4MB][data5-44MB] 

我希望SAN现在是NTFS,以防某些文件系统有任何特殊功能。

如果我让子集足够小以适应ram,我会知道压缩后的大小,但保持它们更小有其他性能缺点。

1 个答案:

答案 0 :(得分:0)

使用稀疏文件。只需将每个子集定位在“保证”的某个偏移处,使其超出最后一个子集。然后,您的标题可以包含每个子集的偏移量,文件系统会为您处理大的“空”块。

更酷的解决方案是将每个子集写为单独的文件,然后使用低级文件系统函数通过将下一个文件的第一个块链接到前一个文件的最后一个块来连接文件(同时删除除第一个文件外的所有目录条目。)