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

2020年9月4日 50点热度 0条评论

我正在使用以下代码将Android中的Asset文件复制到缓存文件夹,关键是它是Java代码,并将其转换为Kotlin,但看起来更多的是Java(ish),而在while循环周围:

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 扩展功能,
some其他
handy 扩展功能和
copyTo 函数,从而将代码简化到最大程度。

PS:
Closeable.use应该是Java 7 try-with-resource构造的kotlin副本,具有更好的简便性。