Лучший способ использовать командой bufferedreader в Котлин

поэтому я только начал использовать Kotlin для Android и преобразовал свои коды Android Java в Kotlin.

в одном из преобразований я наткнулся на BufferedReader, который я обычно писал на Java следующим образом:

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

но в Котлине кажется, что Котлин не позволяет мне назначать значения переменным в условиях while.

В настоящее время я написал код следующим образом:

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

что я не так элегантно и чувствует себя prev-gen, несмотря на использование Котлина.

Как лучше всего использовать BufferedReader в Котлине?

3 ответов


можно использовать bufferedReader вот так

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

Если вы все еще хотите прочитать его строка за строкой, вы можете использовать некоторые функции расширения из 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 на reader, функция расширений useLines сделает это за вас!

просто добавляя их для справки.. ура!--3-->


использовать такой код


    val input = conn.inputStream
    val allText = input.bufferedReader().use(BufferedReader::readText)
    val result = StringBuilder()                   

    result.append(allText)
    return result.toString()

    } else {

    return "unsuccessful"

    }