rek*_*ire 5 java io performance jvm kotlin
我正在处理大型文本文件(多GB),我需要将其转换为JSON结构.当然我无法将其加载到内存中,所以我正在流式传输它.
我目前的方法是使用BufferedReader和调用逐行读取输入文件readLine().首先,它不是非常高效.那么,如何提高读取速度呢?
另一件事现在我可以快速写出数据,首选的顺序是正确的吗? - >多线程?
现在我的程序运行了一段时间,只有一个高负载,一个CPU和一个很小的内存使用(约77MB,处理12GB文件)和低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()
我会对你的想法感兴趣,以加快这个读/写过程.
| 归档时间: | 
 | 
| 查看次数: | 161 次 | 
| 最近记录: |