优化文件处理负载

时间:2018-07-13 07:14:14

标签: java performance io kotlin jvm

我正在处理大型文本文件(多个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()

我会对您的想法感兴趣,以加快此读写过程。

0 个答案:

没有答案