Лучшая практика для преобразования 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
    Kotlin: условные элементы при создании карты Как отправить значение params как json array Каков наилучший способ определения константы log TAG в Kotlin? Как получить Flowable <List <Foo >> из объекта «Bar» с отношениями «один ко многим» «Foo» с использованием realm и Rxjava Как получить данные из базы данных Firebase и сохранить их в ListArray <Class>? – Котлин Тип несоответствия: выведенный тип – FragmentActivity? но при обновлении библиотеки поддержки до 27.0.0 compileKotlin block in build.gradle file throws error "Не удалось найти метод compileKotlin () для аргументов " Как установить конфигурации package.json с помощью kotlin-frontend-plugin Возвращает результат запроса postgresql в функции Spring Boot сериализует текст / javascript для JSON Дженкинс град строит неудачу из-за приложения: compileDebugKotlin Список firebase listview показывает пустую страницу Привязка данных к Android в подмодуле Есть ли какой-либо примерный рабочий код для создания предварительно подписанных URL S3 в Котлине Можете ли вы отобразить / свести строку в Int?