Лучшая практика для преобразования java-кода, используемого для копирования файлов с файлами в кеш-папку в Android на Kotlin

Я использую этот код для копирования файлов Asset в Android для кэширования папки, дело в том, что это был Java-код, и я конвертирую его в Kotlin, но он больше похож на Java (ish) в основном вокруг цикла:

val file = File("${cacheDir.path}/$fileName") val dir = file.parentFile dir.mkdirs() val inputStream = assets.open(fileName) val bufferedOutputStream = BufferedOutputStream(FileOutputStream(file)) val buf = ByteArray(10240) var num = inputStream.read(buf) // Java version: while ((num = fi.read(buf)) > 0) while (num > 0) { bufferedOutputStream.write(buf, 0, num) num = inputStream.read(buf) } bufferedOutputStream.close() inputStream.close() 

любого эксперта, который может сделать его более Котлин.

    Фактически после полного перевода код должен выглядеть так:

     val file = File("${cacheDir.path}/$fileName") val dir = file.parentFile dir.mkdirs() val inputStream = assets.open(fileName).use { input -> val bufferedOutputStream = file.outputStream().buffered().use { output -> input.copyTo(output, 10240) } } 

    Это использует Closeable.use расширения Closeable.use , некоторые другие удобные функции расширения и функцию copyTo упомянутую выше разработчиком, чтобы упростить код до максимальных значений.

    PS: Closeable.use должен быть котлинским аналогом конструкции Java 7 try-with-resource с гораздо большей простотой.

    Идиоматический способ переписать это – полностью избавиться от цикла while и заменить его на стандартную библиотечную функцию copyTo .

    Intereting Posts
    как использовать @jvmoverloads с интерфейсом в Kotlin Как изменить карту в Котлине? статический эквивалент в Android для kotlin, чтобы избежать утечек памяти обработчика Свойство kotlin delegate, В методе get () как я могу получить доступ к значению? Kotlin JSR-223 ScriptEngineFactory в толстой банке – Не удается найти компилятор kotlin компилятора Ошибка в моей первой таблице в котлине Настройка установщика интерфейса в классе, реализующего его Плагин Kotlin-allopen + @JvmField на val не достаточно окончательный Установка расширения котлина Странная ошибка «Неразрешенная ссылка:» после обновления до Kotlin 1.0.5 Проверка подключения не работает в Android Oreo Kotlin как реализовать ограниченный вызов с клиентом блокировки доработки и сопрограммами Массив вложенных пар в котлин Querydsl – результат разделения на два или более объекта Как отклонить диалоговое окно предупреждения Android через setOnEditorActionListener?