这可能更像是一个理论问题。我有一个场景,其中有一个压缩文件(~2 GB),它被解压缩成一个更大的文件(~22GB)。这个过程大约需要20分钟,这反过来意味着每次这个过程运行时我都会浪费大约19分59秒。我的问题如下:是否可以从正在解压缩的文件中打开一个流,并将信息传递给将操纵数据的单独程序?基本上文件中的每一行都是一条记录,但我无法找到一种技术来发现在解压缩过程中线路何时被完全解码。通用算法或Java库是有价值的。
答案 0 :(得分:3)
是的,这很容易。在unix中,你可能会这样做
bzcat compressedfile.bz2 | mainprogram
然后您的主程序可以在标准输入上读取解压缩的流。 zip和gzip存在类似的命令行程序。
如果主程序需要从文件而不是标准输入读取,请使用named pipe。
如果你在Windows上,可能有也可能没有类似的工具。
答案 1 :(得分:3)
您可以使用java.util.zip
的GZIPInputStream
按顺序读取gzip文件。然后,您可以实现自己的缓冲和提取行,或使用readLine
方法{/ 3}}。