我是 scala 的新手,并且可以即时解决问题。我有一个程序需要读取各种大小的 Gzip 文件 - 20KB、2MB 和 150MB(是的,压缩文件是 150MB)。我认为没有一种不同的方法来读取不同的文件,而是一种标准的方法。我看到的大多数方法都使用 64MB 的缓冲区大小来逐行读取文件?什么是最好的(读作,*最快和干净的内存*做这件事的方式)方法?
在此先感谢您的帮助!
更新1:
阅读率大大提高。(我什至会分享我的业力点)谢谢!:)
但是,我注意到,由于我的每个文件都有大约 10K 行,在将它们写入文件时,在写入文件之前将字符串迭代器转换为字符串需要很长时间。我可以做两种方法,
- 逐行迭代并逐行写入文件。
- 逐行迭代以将行转换为大字符串(“\n”分隔)并将该大字符串写入文件。
我假设 [2] 会更快。所以,这就是我为写作所做的,
var processedLines = linesFromGzip(new File(fileName)).map(line => MyFunction(line))
var outFile = Resource.fromFile(outFileName)
outFile.write(processedLines.mkString("\n")) // severe overhead -> processedLines.mkString("\n")
此外,我的分析(通过评论 write() 表明,编写不需要太多时间,而是将其转换processedLines
为单个大字符串 - 需要将近一秒钟 - 这对我的应用程序来说是巨大的成本。什么会最好的(再次干净没有任何内存泄漏)方法来做到这一点。