如何使用线程尽快读取zip流?

时间:2015-04-23 09:55:00

标签: java multithreading zip java-8 java-stream

我有1GB的zip文件,包含大约2000个文本文件。我想尽快读取所有文件和所有行。

    try (ZipFile zipFile = new ZipFile("file.zip")) {
        zipFile.stream().parallel().forEach(entry -> readAllLines(entry)); //reading with BufferedReader.readLine();
    }

结果:stream.parallel()比普通流快约30-50%。

问题:如果我没有使用parallel API读取流,但我可以明确地从文件中读取我自己的线程吗?

我可以进一步优化性能吗?

1 个答案:

答案 0 :(得分:4)

也许。请记住,切换线程有点昂贵,Java 8的parallel()非常好。

解压缩ZIP流是CPU密集型的,因此更多线程不会让事情变得更快。如果您创建自己的执行服务,并仔细平衡线程数和核心数,那么您可能能够找到比Java 8 parallel()更好的最佳位置。

剩下的另一件事是使用更好的缓冲策略来读取文件。但这对ZIP档案来说并不容易。您可以尝试使用ZipInputStream而不是ZipFile,但将流API与Jav​​a 8的Stream API((de)compressing files using NIO)混合起来并不容易。

相关问题