2017-05-10 3 views
0

Androidのキャッシュファイルをコピーするためにこのコードを使用しています。ポイントはJavaコードであり、Kotlinに変換しますループの周りには多くのJava(ish)が見えます。アセットファイルをコピーするためのベストプラクティスをAndroidのキャッシュフォルダにKotlinに変換する

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() 

これ以上コトリンを作ることができる専門家。

答えて

1

コードは次のようになります必要があります翻訳:

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拡張機能のsomehandy拡張関数とDEVにより上記copyTo機能を活用しています最大値まで

PS:Closeable.useは、はるかに優れたシンプルさで、Java 7のtry-with-resource構造のkotlinに相当するはずです。

+0

WOW!ありがとう、それは素晴らしかったです。私はこの新しい言語が本当に好きです。あなたの答えの一部を編集し、ピアレビュー後に正解と確認します。 –

1

これを書き換える慣用方法は、whileループを完全に取り除き、それをcopyTo standard library functionに置き換えることです。フル後の実際

関連する問題