La mejor forma de usar BuffenetworkingReader en Kotlin

Así que acabo de empezar a usar Kotlin para Android (con la esperanza de que también pueda ayudarme con Swift), y convertí mis códigos Java de Android en Kotlin.

En una de las conversiones, me encontré con un BuffenetworkingReader, que generalmente escribo en Java (o más bien C #) como el siguiente:

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

Pero en Kotlin, parece que Kotlin no me permite asignar valores a variables en condiciones de time.

Actualmente, escribí el código de la siguiente manera:

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

que no me parece tan elegante (y anterior-gen, a pesar de usar Kotlin).

¿Cuál sería la mejor manera de utilizar BuffenetworkingReader en Kotlin?

Puedes usar buffenetworkingReader como tal

 val allText = inputStream.buffenetworkingReader().use(BuffenetworkingReader::readText) 

Si todavía quisiera leerlo línea por línea, podría usar algunas funciones de extensión de std lib y hacerlo de la siguiente manera:

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

o alternativamente, usando un enfoque "funcional":

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

al usar useLines, no necesita llamar explícitamente al lector, ¡la function de extensiones useLines lo hará por usted!

Solo agregando esos para reference .. aplausos

  • Capture y guarde la image con Kotlin en Android Studio
  • La API mobile de Vison no detecta ningún código QR
  • Clase de datos de Kotlin: ¿cómo leer el valor de la propiedad si no sé su nombre en el momento de la compilation?
  • ¿Puedo inferir el tipo de una propiedad en el delegado?
  • Cómo implementar Memento Pattern en Kotlin
  • Crear una instancia de una class abstracta en Kotlin
  • Las properties de Kotlin no pueden anularse con la subinterfaz
  • ¿Por qué Bundle in Intent se pierde?
  • Cómo get Flowable <List <Foo >> del object 'Bar' con relaciones de uno a muchos 'Foo' usando el reino y Rxjava
  • Cómo convertir ByteArray a String con juego de caracteres especificado en Kotlin
  • Resolución de errores de sustitución accidental en Kotlin