我想打开资产文件。在java代码工作之前,当我将代码更改为kotlin时,它不起作用。
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();
我将代码更改为Kotlin但不起作用
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 :(得分:5)
您的Kotlin代码中没有循环,所以您只读取和写入前1024个字节。
这是科特林的写作方式:
FileOutputStream(LOCATION).use { out ->
context.assets.open(Database.ASSET).use {
it.copyTo(out)
}
}
注1:您不需要缓冲InputStream或OutputStream,因为复制操作本身已经使用了字节缓冲区。
注2:关闭OutputStream会自动刷新它。