我正在处理大型文本文件(多个GB),因此需要将其转换为JSON结构。当然,我无法将其加载到内存中,所以我正在对其进行流式传输。
我当前的方式是使用BufferedReader
并调用readLine()
逐行读取输入文件。第一件事是,它不是很出色。那么,如何提高读取速度?
另一件事是,现在我可以按正确的顺序快速写出数据了吗? ->多线程?
现在我的程序运行了一段时间,单个CPU的负载很高,而内存占用却很小(在处理12GB文件时约为77MB),IO负载很低,为11MB / s,磁盘使用率约为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()
我会对您的想法感兴趣,以加快此读写过程。