在 Kotlin 中使用 BufferedReader 的最佳方式

新手上路,请多包涵

所以我刚刚开始在 Android 上使用 Kotlin,并将我的 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 的最佳方式是什么?

原文由 Akira Kido 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

你可以像这样使用 bufferedReader

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

原文由 miensol 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你仍然想逐行阅读它,你可以使用 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 扩展函数将为您完成!

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

原文由 João Gonçalves 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题