从Kotlin的巨大文件中读取第一行

pix*_*xel 2 file kotlin

我想读File一下kotlin中的第一行(也是唯一一行).文件本身很大,所以我想使用内存高效的解决方案.

我想知道是否有更好的解决方案:

File("huge.txt").bufferedReader().readLine()
Run Code Online (Sandbox Code Playgroud)

ape*_*lla 6

您现在所拥有的已经非常高效 - 文件将以小块的形式加载,直到bufferedReader读取一行为止。但是,您应该确保阅读器已关闭 - 像这样:

File("huge.txt").bufferedReader().use { it.readLine() }
Run Code Online (Sandbox Code Playgroud)

如果您不需要速度,使用常规的无缓冲读取器可能会节省一点内存,但不多。


Rol*_*and 5

你可以使用:

file.useLines { it.firstOrNull() }
Run Code Online (Sandbox Code Playgroud)

要么:

file.bufferedReader().use { it.readLine() }
Run Code Online (Sandbox Code Playgroud)

两者都确保您在该行之后实际关闭读者并且同样有效.

如果您确定总是存在第一行并且文件永远不会为空,您也可以使用first()而不是调用it.readLine()!!(这实际上取决于您是否将结果分配给可空类型).