在Java中高效读取zip文件

sme*_*its 6 java performance zip nio large-data

我正在从事一个处理大量数据的项目。我有很多(数千个)zip 文件,每个文件都包含一个简单的 txt 文件,其中包含数千行(大约 80k 行)。我目前正在做的事情如下:

for(File zipFile: dir.listFiles()){
ZipFile zf = new ZipFile(zipFile);
ZipEntry ze = (ZipEntry) zf.entries().nextElement();
BufferedReader in = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
...
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以逐行读取文件,但它确实太慢了。鉴于需要读取大量文件和行,我需要以更有效的方式读取它们。

我一直在寻找不同的方法,但我还没有找到任何东西。我认为我应该使用适用于密集型 I/O 操作的 java nio API,但我不知道如何将它们与 zip 文件一起使用。

任何帮助将不胜感激。

谢谢,

马可

NPE*_*NPE 3

我有很多(数千个)zip 文件。每个压缩文件约为 30MB,而 zip 文件内的 txt 约为 60/70 MB。使用此代码读取和处理文件需要花费很多时间,大约 15 个小时,但这取决于情况。

让我们做一些粗略的计算。

假设您有 5000 个文件。如果处理它们需要 15 小时,则相当于每个文件约 10 秒。每个文件约为 30MB,因此吞吐量约为 3MB/s。

ZipFile这比解压东西的速度慢一到两个数量级。

要么是磁盘有问题(它们是本地磁盘还是网络共享磁盘?),要么是实际处理占用了大部分时间。

确定的最佳方法是使用分析器。