流模式与块模式

Streaming mode vs block mode

我无法弄清楚现代 compression/decompression 算法(例如 ZStandard 或 LZ4)提供的 流模式 到底是什么以及如何利用它。

例如,假设我有 4x16KB 个文件。我可以(单独)压缩每个文件并获得 4xDifferentCompressedLength 个文件。但是,我可以使用 流模式 将所有 4 个文件压缩在一起(按顺序发送它们,对吗?)并获得 1xCompressedLength 并期望压缩率更好。

我可以只解压(比方说)第三个文件而不解压之前的所有文件吗? 流模式是否会在我附加的文件之间引入依赖关系?

是的,流式传输会引入文件之间的依赖关系。 在您的示例中,解码 file3 需要先解码 file1 然后 file2.

另请注意,数据将显示为附加的,文件之间没有特定标记。因此,如果每个文件很重要,就需要一种方法来了解每个文件的开始和结束位置。有时它是隐式的(例如:固定的 16KB 大小),有时它可以从数据本身中扣除(特定的结束标记),有时它需要额外的元数据。这完全取决于应用程序。

你是正确的,C(4xFiles) 的压缩率预计会比 4xC(File) 好,尤其是当这 4 个文件有些相关时(例如,如果它们都是文本文件)。