Saltar al contenido

En Kotlin, ¿cómo leo todo el contenido de un InputStream en una cadena?

Nuestro equipo de expertos luego de varios días de investigación y recopilación de de datos, hemos dado con la solución, queremos que te resulte útil en tu trabajo.

Solución:

Kotlin tiene extensiones específicas solo para este propósito.

Lo más simple:

val inputAsString = input.bufferedReader().use  it.readText()   // defaults to UTF-8

Y en este ejemplo podrías decidir entre bufferedReader() o solo reader(). La llamada a la función. Closeable.use() cerrará automáticamente la entrada al final de la ejecución de la lambda.

Otras lecturas:

Si haces mucho este tipo de cosas, podrías escribir esto como una función de extensión:

fun InputStream.readTextAndClose(charset: Charset = Charsets.UTF_8): String 
    return this.bufferedReader(charset).use  it.readText() 

Que luego podría llamar fácilmente como:

val inputAsString = input.readTextAndClose()  // defaults to UTF-8

Como nota al margen, todas las funciones de extensión de Kotlin que requieren conocer el charset ya por defecto UTF-8por lo que si necesita una codificación diferente, debe ajustar el código anterior en las llamadas para incluir una codificación para reader(charset) o bufferedReader(charset).

Advertencia: Es posible que vea ejemplos que son más cortos:

val inputAsString = input.reader().readText() 

Pero estos no cierres la corriente. Asegúrese de consultar la documentación de la API para todas las funciones de IO que utiliza para asegurarse de cuáles se cierran y cuáles no. Por lo general, si incluyen la palabra use (tal como useLines() o use()) cierras el arroyo después. Una excepción es que File.readText() difiere de Reader.readText() en que el primero no deja nada abierto y el segundo sí requiere un cierre explícito.

Ver también: Funciones de extensión relacionadas con Kotlin IO

Un ejemplo que lee el contenido de un InputStream a una cadena

import java.io.File
import java.io.InputStream
import java.nio.charset.Charset

fun main(args: Array) 
    val file = File("input"+File.separator+"contents.txt")
    var ins:InputStream = file.inputStream()
    var content = ins.readBytes().toString(Charset.defaultCharset())
    println(content)

Para referencia: archivo de lectura de Kotlin

No se te olvide mostrar esta crónica si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *