Android Kotlin打开资产文件

5

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

具体是什么出了问题?有任何异常吗? - Mibac
没有例外。当我调试我的应用程序时,调试器无法进入lambda函数(BufferedOutputStream)。 - kibar
1个回答

10

您的 Kotlin 代码中没有循环,因此您只读取和写入了前 1024 字节。

以下是 Kotlin 编写此代码的方式:

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

注意1:在复制操作本身已经使用了字节缓冲区的情况下,您不需要缓冲InputStream或OutputStream。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接