2017-07-16 47 views
0

我想打开资源文件。在java代码工作之前,但当我将代码更改为kotlin时,它不起作用。Android的开放科特林资源文件

Java代码的工作

 InputStream streamIN = new BufferedInputStream(context.getAssets().open(Database.ASSET)); 
     OutputStream streamOU = new BufferedOutputStream(new FileOutputStream(LOCATION)); 
     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = streamIN.read(buffer)) > 0) { 
      streamOU.write(buffer, 0, length); 
     } 

     streamIN.close(); 
     streamOU.flush(); 
     streamOU.close(); 

我更改代码科特林但它不工作

var length: Int 
    val buffer = ByteArray(1024) 
    BufferedOutputStream(FileOutputStream(LOCATION)).use { 
     out -> 
     { 
      BufferedInputStream(context.assets.open(Database.ASSET)).use { 
       length = it.read(buffer) 
       if (length > 0) out.write(buffer, 0, length) 
      } 

      out.flush() 
     } 
    } 
+0

什么并不完全工作?任何例外? – Mibac

+0

没有例外。当我调试我的应用程序,调试器是不是在lambda函数(的BufferedOutputStream) – kibar

回答

3

。在你的科特林代码中没有循环,所以你只读取和写入前1024个字节。

这里写它的科特林方式:

FileOutputStream(LOCATION).use { out -> 
    context.assets.open(Database.ASSET).use { 
     it.copyTo(out) 
    } 
} 

注1:你不需要缓冲的InputStream和OutputStream的自复制操作本身就已经使用字节的缓冲区。

注2:关闭的OutputStream将自动刷新它。

+0

wooow ..惊人进去! – kibar