繁体   English   中英

用Deflater或GZIPOutputStream Java压缩数据

[英]Java- concatenating compressed data with Deflater or GZIPOutputStream

我们有一堆线程需要一个数据块,压缩这些数据,然后最终将它们串联成一个大字节数组。 如果有人可以扩大这个想法或推荐其他方法,那将是很棒的。 我目前有两种方法正在尝试,但两种方法均无法正常工作:


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

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

我认为您可以手动切断标题和尾部,并且只剩下压缩数据(并保留第一个块的标题和最后一个块的尾部)。 我不确定使用此方法的另一件事是我是否可以做到这一点。 如果我将标头保留在第一个数据块上,它将仍然正确解压缩。 该标头是否仅包含数据的第一个块的信息,而不包含其他串联的块的信息?


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

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

您需要一个方法来写入其他线程调用的单个GZIPOutputStream,并在它们之间进行适当的协调,以免数据混淆。 否则让线程写入临时文件,然后在第二阶段将其组装并压缩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM