2017-05-10 2 views
0

안드로이드에서 자산 파일을 캐시 폴더로 복사 할 때이 코드를 사용합니다. 핵심은 자바 코드 였고 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 확장 기능을 활용, some 다른 handy 확장 기능과 디바이스에 의해 위에서 언급 한 copyTo 기능은 코드를 단순화하기 맥스에게.

추 신 : Closeable.use은 훨씬 더 단순하게 Java 7 시험 자원 구조의 kotlin 대응이어야합니다.

+0

와우! 고마워, 훌륭했다. 나는이 새로운 언어를 정말로 좋아한다. 귀하의 답변 일부를 편집하고 동료 평가 후 정답으로 확인합니다. –

관련 문제