Intereting Posts
Каков идиоматический способ клонирования MutableMap? Котлин – неразрешенная ссылка для константы Обработка истекших ссылок при разборе JSON из приложения Android Kotlin с пакетом RxKotlinFX дает Не удается получить доступ к ошибке класса Невозможно разрешить моему приложению использовать обратную связь над другими правами на приложения Только последний элемент добавлен в RecyclerView в Android (Kotlin) подавить предупреждение неиспользуемой переменной Настройки jvmArgs для отчетов Allure эта ссылка в ленивом инициализаторе свойства расширения котлина В чем разница между CoroutineContext и Job в kotlinx.coroutines? Как передать интерфейс в моем адаптере Kotlin RecylerView и получить обратный вызов в деятельности Kotlin Как узнать, работает ли приложение загрузки Spring в режиме отладки? firebase, эквивалентная sql, где в () Ограничения типа класса Generics? Запуск тестов из Android Studio IDE не восстанавливает чистый библиотечный модуль Java

Лучшая практика для преобразования 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() 

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

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

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

 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 .