Kotlin从文件读入字节数组

时间:2019-03-29 11:36:28

标签: android kotlin

如何将字节读入字节数组?在Java中,我曾经将字节数组初始化为byte[] b = new byte[100],然后将其传递给相应的方法。但是在Kotlin中,我无法使用缓冲区应具有的字节数初始化ByteArray

换句话说,如何使用此功能?: https://developer.android.com/reference/kotlin/java/io/RandomAccessFile#read(kotlin.ByteArray)

2 个答案:

答案 0 :(得分:5)

最简单的方法是使用

File("aaa").readBytes()

那个人会将整个文件读入ByteArray。但是您应该仔细知道堆中有足够的RAM来完成

可以通过ByteArray(100)调用创建ByteArray,其中100是它的大小

对于RandomAccessFile,最好在readFully函数中使用,该函数准确读取请求的字节数。

经典方法可以按块读取文件,例如

    val buff = ByteArray(1230)
    File("aaa").inputStream().buffered().use { input ->
      while(true) {
        val sz = input.read(buff)
        if (sz <= 0) break

        ///at that point we have a sz bytes in the buff to process
        consumeArray(buff, 0, sz)
      }
    }

答案 1 :(得分:1)

我发现这很好用:

fun File.chunkedSequence(chunk: Int): Sequence<ByteArray> {
    val input = this.inputStream().buffered()
    val buffer = ByteArray(chunk)
    return generateSequence {
        val red = input.read(buffer)
        if (red >= 0) buffer.copyOf(red)
        else {
            input.close()
            null
        }
    }
}

像这样使用它。

    file.chunkedSequence(CHUNK_SIZE).forEach {
        // Do something with `it`
    }

与您的问题不完全匹配,但这是当我试图将文件分块为字节数组序列时出现的问题。