Escribir un Inputstream grande para archivar en Kotlin

Recibo una gran cantidad de text del service web REST y me gustaría escribirlo directamente en el file. ¿Cuál es la forma más simple de hacer esto?

He escrito la siguiente extensión de function que FUNCIONA. Pero no puedo dejar de pensar que hay una forma más limpia de hacerlo.

Nota : Esperaba usar try with resources para cerrar automáticamente la secuencia y el file

fun File.copyInputStreamToFile(inputStream: InputStream) { val buffer = ByteArray(1024) inputStream.use { input -> this.outputStream().use { fileOut -> while (true) { val length = input.read(buffer) if (length <= 0) break fileOut.write(buffer, 0, length) } fileOut.flush() } } } 

Puede simplificar su function utilizando la function copyTo :

 fun File.copyInputStreamToFile(inputStream: InputStream) { inputStream.use { input -> this.outputStream().use { fileOut -> input.copyTo(fileOut) } } } 

Sugiero hacer esto:

 fun InputStream.toFile(path: String) { use { input -> File(path).outputStream().use { input.copyTo(it) } } } 

y luego usar como:

 InputStream.toFile("/some_path_to_file") 

Mi proposition es:

 fun InputStream.toFile(path: String) { File(path).outputStream().use { this.copyTo(it) } } 

sin cerrar la stream actual

 InputStream.toFile("/path/filename") 

Además, no se olvide de manejar excepciones, por ejemplo, si se deniega el permiso de escritura 🙂

Tienes que hacer esto

 @Throws fun copyDataBase() { var myInput = context.getAssets().open(DB_NAME) var outFileName = DB_PATH + DB_NAME var fileOut: OutputStream = FileOutputStream(outFileName) val buffer: ByteArray = ByteArray(1024) var length: Int? = 0 while (true) { length = myInput.read(buffer) if (length <= 0) break fileOut.write(buffer, 0, length) } fileOut.flush() fileOut.close() myInput.close() throw IOException() } 
  • Moshi ignora el campo en Kotlin
  • kotlin consiguiendo un suscriptor para observar un observable usando RxJava2
  • Kotlin android plotble
  • Cómo replace un FrameLayout con un fragment con Kotlin en Android
  • Deshabilitar la generación META-INF / * en el proyecto gradle android library kotlin
  • Referencia no resuelta: LinearLayoutManager / RecyclerView
  • IntelliJ Idea cuando se testingn múltiples modules a la vez, solo se incluyen artefactos de un module
  • Clase de datos Igualdad en Kotlin
  • La identidad de KotlinEquals no funciona como se esperaba
  • Kotlin delegando a un futuro
  • Use ExpectedException con Kotlin