将用于复制资产文件的java代码转换为Android中的缓存文件夹到Kotlin的最佳实践

我使用这个代码来将Android中的Asset文件复制到缓存文件夹,重点在于它是一个Java代码,我将它转换为Kotlin,但是它看起来更多的是围绕while循环的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() 

任何能使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扩展函数, 一些其他方便的扩展函数和dev上面提到的copyTo函数来简化代码到最大值。

PS: Closeable.use应该是Java 7 try-with-resource结构中的kotlin对应部分,具有更好的简单性。

重写这个的惯用方法是完全摆脱while循环,并用copyTo标准库函数替换它。