Java-与放气或GZIPOUTPUTSTREAM的压缩数据



我们有一堆螺纹吸收数据块,压缩数据,然后最终将它们串联成一个大字节数组。如果有人可以扩展这个想法或推荐另一种方法,那就太棒了。我目前有两种方法正在尝试,但是他们都不应按照他们的方式工作:


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

问题在此方法中,由于每个线程都有一个数据块,这是我调用GZIPOutputStream时更长的完整数据的一部分,因此它将小块视为完整的一部分数据到拉链。这意味着它会粘在标题和拖车上(我还使用自定义词典,所以我不知道现在的标题有多少位,也不知道如何找出答案)。

我认为您可以手动切断标头和拖车,而您只会留下压缩数据(并留下第一个块的标题和最后一个块的拖车)。我不确定这种方法的另一件事是我什至可以做到这一点。如果我将标题留在第一个数据块上,它仍然会正确解压缩吗?该标头难道仅包含数据的第一个块而不是其他串联块的信息?


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

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

您需要一种写入其他线程调用的单个gzipoutputstream的方法,它们之间有合适的协调,因此数据不会混合在一起。否则,将线程写入临时文件,然后在第二阶段组装和拉链。

最新更新