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