在 Kotlin 中使用 BufferedReader 的最佳方式

2022-09-01 00:15:31

所以我刚刚开始使用 Kotlin for Android,并将我的 Android Java 代码转换为 Kotlin。

在其中一次转换中,我偶然发现了一个BufferedReader,我通常会用Java编写如下:

String result = "";
String line = "";
BufferedReader reader = new BufferedReader(someStream);
while ( (line = reader.readLine()) != null ) {
    result += line;
}

但是在 Kotlin 中,Kotlin 似乎不允许我在 while 条件下为变量赋值。

目前,我已将代码编写如下:

val reader = BufferedReader(someStream)
var line : String? = ""
while (line != null) {
    line = reader.readLine()
    result += line
}

我觉得它不是那么优雅,感觉是上一代,尽管使用了Kotlin。

在 Kotlin 中使用 BufferedReader 的最佳方式是什么?


答案 1

你可以像这样使用缓冲阅读器

val allText = inputStream.bufferedReader().use(BufferedReader::readText)

答案 2

如果您仍然想逐行阅读它,则可以使用std lib中的一些扩展函数,并按如下方式进行:

val reader = someStream.bufferedReader()
val iterator = reader.linesSequences().iterator()
while(iterator.hasNext()) {
    val line = iterator.next()
    // do something with line...
}
reader.close()

或者,使用“功能性”方法:

val reader = someStream.bufferedReader()
reader.useLines {
    it.map { line -> // do something with line }
}

通过使用useLines,您不需要在阅读器上显式调用close,useLines扩展功能将为您完成!

只是添加那些供参考..干杯


推荐