流模式与块模式
Streaming mode vs block mode
我无法弄清楚现代 compression/decompression 算法(例如 ZStandard 或 LZ4)提供的 流模式 到底是什么以及如何利用它。
例如,假设我有 4x16KB
个文件。我可以(单独)压缩每个文件并获得 4xDifferentCompressedLength
个文件。但是,我可以使用 流模式 将所有 4 个文件压缩在一起(按顺序发送它们,对吗?)并获得 1xCompressedLength
并期望压缩率更好。
我可以只解压(比方说)第三个文件而不解压之前的所有文件吗? 流模式是否会在我附加的文件之间引入依赖关系?
是的,流式传输会引入文件之间的依赖关系。
在您的示例中,解码 file3
需要先解码 file1
然后 file2
.
另请注意,数据将显示为附加的,文件之间没有特定标记。因此,如果每个文件很重要,就需要一种方法来了解每个文件的开始和结束位置。有时它是隐式的(例如:固定的 16KB 大小),有时它可以从数据本身中扣除(特定的结束标记),有时它需要额外的元数据。这完全取决于应用程序。
你是正确的,C(4xFiles)
的压缩率预计会比 4xC(File)
好,尤其是当这 4 个文件有些相关时(例如,如果它们都是文本文件)。
我无法弄清楚现代 compression/decompression 算法(例如 ZStandard 或 LZ4)提供的 流模式 到底是什么以及如何利用它。
例如,假设我有 4x16KB
个文件。我可以(单独)压缩每个文件并获得 4xDifferentCompressedLength
个文件。但是,我可以使用 流模式 将所有 4 个文件压缩在一起(按顺序发送它们,对吗?)并获得 1xCompressedLength
并期望压缩率更好。
我可以只解压(比方说)第三个文件而不解压之前的所有文件吗? 流模式是否会在我附加的文件之间引入依赖关系?
是的,流式传输会引入文件之间的依赖关系。
在您的示例中,解码 file3
需要先解码 file1
然后 file2
.
另请注意,数据将显示为附加的,文件之间没有特定标记。因此,如果每个文件很重要,就需要一种方法来了解每个文件的开始和结束位置。有时它是隐式的(例如:固定的 16KB 大小),有时它可以从数据本身中扣除(特定的结束标记),有时它需要额外的元数据。这完全取决于应用程序。
你是正确的,C(4xFiles)
的压缩率预计会比 4xC(File)
好,尤其是当这 4 个文件有些相关时(例如,如果它们都是文本文件)。