有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案