gpt4 book ai didi

java - 如何使用线程尽可能快地读取 zip 流?

转载 作者:行者123 更新时间:2023-11-30 07:01:28 25 4
gpt4 key购买 nike

我有一个 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 读取流,而是显式触发我自己的线程以从文件中读取,我是否可以进一步优化性能?

最佳答案

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

解压缩 ZIP 流是 CPU 密集型的,所以更多的线程不会使事情变得更快。如果您创建自己的执行服务,仔细平衡线程数和内核数,您可能会找到比 Java 8 的 parallel() 更好的最佳平衡点。

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

关于java - 如何使用线程尽可能快地读取 zip 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com