java优化文件处理的负载
我正在处理大型文本文件(多GB),需要将其转换为JSON结构。当然,我无法将其加载到内存中,所以我正在对其进行流式处理
我目前的方法是使用BufferedReader
并调用readLine()
逐行读取输入文件。首先,它的性能不是很好。那么,如何提高读取速度呢
另一件事是现在我可以快速写出数据了吗,最好是以正确的顺序-&燃气轮机;多线程
现在,我的程序运行了一段时间,只有一个高负载单CPU和一个很好的小内存使用率(~77MB,处理一个12GB的文件)和一个11MB/s的低IO负载,即磁盘使用率约为2-5%
我正在将数据存储在驱动器上。我通过该迭代器访问数据:
private class FileLineIterator(file: File) : MutableIterator<String> {
private val reader = file.bufferedReader()
override fun hasNext() = reader.ready()
override fun next(): String = reader.readLine()
override fun remove() {
NotImplementedError("Not supported in this mode")
}
}
我的用法如下所示:
val out = File("test.txt").outputStream()
val files = File("cache/").listFiles { _, name -> name.endsWith(".cache") }
out.write(prefix)
files.forEach { file ->
val lines = FileLineIterator(file)
val isFirstLine = true
lines.forEachIndexed { index, line ->
if(isFirstLine) {
isFirstLine = false
} else {
out.write(','.toInt())
}
out.write(lineStart)
out.write(line.toByteArray())
out.write('"'.toInt())
}
}
out.write(suffix)
out.close()
我很想听听你关于加速读/写过程的想法
共 (0) 个答案