在解压缩要传递给工作池的文件期间打开流的适当时间

时间:2012-05-22 13:13:14

标签: java performance algorithm compression

这可能更像是一个理论问题。我有一个场景,其中有一个压缩文件(~2 GB),它被解压缩成一个更大的文件(~22GB)。这个过程大约需要20分钟,这反过来意味着每次这个过程运行时我都会浪费大约19分59秒。我的问题如下:是否可以从正在解压缩的文件中打开一个流,并将信息传递给将操纵数据的单独程序?基本上文件中的每一行都是一条记录,但我无法找到一种技术来发现在解压缩过程中线路何时被完全解码。通用算法或Java库是有价值的。

2 个答案:

答案 0 :(得分:3)

是的,这很容易。在unix中,你可能会这样做

bzcat compressedfile.bz2 | mainprogram

然后您的主程序可以在标准输入上读取解压缩的流。 zip和gzip存在类似的命令行程序。

如果主程序需要从文件而不是标准输入读取,请使用named pipe

如果你在Windows上,可能有也可能没有类似的工具。

答案 1 :(得分:3)

您可以使用java.util.zipGZIPInputStream按顺序读取gzip文件。然后,您可以实现自己的缓冲和提取行,或使用readLine方法{/ 3}}。