我有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读取流,但我可以明确地从文件中读取我自己的线程吗?
答案 0 :(得分:4)
也许。请记住,切换线程有点昂贵,Java 8的parallel()
非常好。
解压缩ZIP流是CPU密集型的,因此更多线程不会让事情变得更快。如果您创建自己的执行服务,并仔细平衡线程数和核心数,那么您可能能够找到比Java 8 parallel()
更好的最佳位置。
剩下的另一件事是使用更好的缓冲策略来读取文件。但这对ZIP档案来说并不容易。您可以尝试使用ZipInputStream
而不是ZipFile
,但将流API与Java 8的Stream
API((de)compressing files using NIO)混合起来并不容易。