0

我们有一堆线程来获取数据块,压缩这些数据,然后最终将它们连接成一个大字节数组。如果有人可以扩展这个想法或推荐另一种方法,那就太棒了。我目前有两种方法正在尝试,但都没有按照他们应该的方式工作:


第一个:我让每个线程的run()函数获取输入数据并GZIPOutputStream用于压缩它并将其写入缓冲区。

这种方法的问题在于,因为每个线程都有一个数据块,当我调用时,它是一个较长的完整数据的一部分GZIPOutputStream,它会将那个小块视为要压缩的完整数据。这意味着它会粘在标题和预告片上(我也使用自定义字典,所以我不知道标题现在有多少位,也不知道如何找出)。

我认为你可以手动切断标题和预告片,你只会留下压缩数据(并留下第一个块的标题和最后一个块的预告片)。我不确定这种方法的另一件事是我是否可以做到这一点。如果我将标题留在第一个数据块上,它是否仍能正确解压缩。该标头是否仅包含数据的第一个块而不包含其他连接块的信息?


第二种方法是使用Deflater类。在这种情况下,我可以简单地设置输入,设置字典,然后调用deflate().

问题是,这不是 gzip 格式。那只是“原始”压缩数据。我不知道如何制作它以便 gzip 可以识别最终输出。

4

1 回答 1

0

您需要一个写入由其他线程调用的单个 GZIPOutputStream 的方法,它们之间有适当的协调,这样数据就不会混淆。或者让线程写入临时文件,并在第二阶段将其全部组装和压缩。

于 2012-10-28T02:57:41.700 回答