【发布时间】:2018-04-23 21:18:25
【问题描述】:
我的问题可以用以下语句来描述:
- 我希望我的程序能够压缩和解压缩选定的文件
- 我有非常大的文件 (20 GB+)。可以安全地假设该大小永远不会适合内存
- 即使压缩后的压缩文件可能仍然无法放入内存
- 我想使用 .NET Framework 中的 System.IO.Compression.GzipStream
- 我希望我的应用程序是并行的
由于我是压缩/解压缩的新手,我对如何做到这一点有以下想法:
我可以使用将文件拆分成块并分别压缩它们。然后将它们合并回一个完整的压缩文件。
关于这种方法的问题 1 - 压缩多个块,然后将它们合并在一起会给我正确的结果,即如果我要反转过程(从压缩文件开始,回到解压缩文件) 我会收到相同的原始输入吗?
关于这种方法的问题 2 - 这种方法对您有意义吗?也许你可以指导我去听一些关于这个话题的好讲座?不幸的是,我自己找不到任何东西。
【问题讨论】:
-
为什么不直接从文件流通过 GZip 流传输数据,然后通过另一个文件流返回?任何一个文件都不需要放入内存中。
-
@glenebob 和 Cory 谢谢先生们,我明白了!我是否可以理解我可以有多个流压缩同一个文件,每个流都从不同的点开始?我收到 N 个流,然后将它们合并在一起?
-
这可行,但结果不是有效的 GZip 文件。您将不得不发明一种文件格式。每个“块”本身就是一个有效的 GZip 文件。您的格式需要描述每个块,以便以后对各个块进行解压缩。
-
@CoryNelson gzip 压缩 可以 被并行化,但我认为这不是问题所在。它似乎只是关于控制内存使用。需要明确的是,任何有效 gzip 流的串联也是有效的 gzip 流。不需要“专有容器”。
标签: c# .net compression gzipstream system.io.compression