Лучшая практика для преобразования 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
    android studio 3.0.1 и kotlin v1.2.10-release-Studio3.0-1 получили проблемы Почему я не могу использовать @PublishedApi для typealias? Как использовать KeyEvent в Котлине Как я могу автоматически присвоить переменную переменной по типу в реальном шаблоне? Kotlin mutableMap.put возвращает значение nullable Значение ObservableField не распространяется Разница между различными функциями verifySignatures в тестировании блока Corda Всплывающее диалоговое окно завершения работы Kotlin после ввода «объекта». Kotlin использует утверждения времени выполнения для проверки нуля – служебные накладные расходы? Запрос по ключу в Google Firebase Android studio конвертирует в Kotlin: используйте @JvmStatic в некоторых случаях Значок приложения не отображается на устройствах с версией Android больше 4.4.2 Большой размер файла при преобразовании растрового изображения в PDF JDK требуется для Kotlin? Равенство идентичности для аргументов типов Int и Int устарело