Android Kotlin打开资产文件

时间:2017-07-16 20:30:58

标签: android kotlin inputstream

我想打开资产文件。在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()
        }
    }

1 个答案:

答案 0 :(得分:5)

您的Kotlin代码中没有循环,所以您只读取和写入前1024个字节。

这是科特林的写作方式:

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

注1:您不需要缓冲InputStream或OutputStream,因为复制操作本身已经使用了字节缓冲区。

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