2

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

4

2 回答 2

3

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

bzcat compressedfile.bz2 | mainprogram

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

如果主程序需要从文件而不是标准输入中读取,请使用命名管道

如果您使用的是 Windows,则可能有也可能没有类似的工具。

于 2012-05-22T19:44:30.417 回答
3

您可以使用java.util.zip'sGZIPInputStream顺序读取 gzip 文件。然后您可以实现自己的缓冲和提取行,或使用BufferedReaderreadLine方法。

于 2012-05-22T19:44:39.610 回答