我被指派在Java 7中并行化GZip,我不确定哪种可能。
作业是:
我尝试过:
我不确定我的方法是否错误或完全采取了错误的方法。有人能指出我为这个项目使用哪个类的正确方向吗?
答案 0 :(得分:4)
是的,用字典压缩文件无法并行化,因为一切都取决于所有内容。也许你的老师要求你并行化文件夹中多个文件的单个gzipping?这将是并行工作的一个很好的例子。
答案 1 :(得分:4)
正确的并行实现完全符合您的要求:
答案 2 :(得分:1)
要使进程并发,您需要拥有可以并发和独立运行的部分代码。大多数压缩算法都是按顺序运行的,其中每个字节都取决于之前的每个字节。
同时进行压缩的唯一方法是更改algorythm(使其与现有方法不兼容)
答案 3 :(得分:1)
我 认为 您可以通过在压缩流中插入适当的重置来实现。我们的想法是gzip 中使用的底层压缩引擎允许重置deflater,目的是让它更容易从流损坏中恢复,但代价是压缩比更差。重置后,deflater将处于已知状态,因此您实际上可以从多个线程(当然,从输入数据中的许多位置)开始,从该状态(与被压缩的内容无关)开始生成压缩chunk并包含执行以下重置时生成的数据,以便将deflater恢复到已知状态。然后,您只需将压缩的碎片重新组装成整个压缩流。 “简单!”(哈!)
我不知道这是否有效,我怀疑整个事情的复杂性将使它不是一个可行的选择,除非你压缩单个非常大的文件。 (如果你有很多文件,那么很多就可以更容易地并行压缩每个文件。)不过,这是我首先尝试的。
(另请注意,gzip格式只是一个带有额外元数据的泄密流。)