如何将字节读入字节数组?在Java中,我曾经将字节数组初始化为byte[] b = new byte[100]
,然后将其传递给相应的方法。但是在Kotlin中,我无法使用缓冲区应具有的字节数初始化ByteArray
。
换句话说,如何使用此功能?: https://developer.android.com/reference/kotlin/java/io/RandomAccessFile#read(kotlin.ByteArray)
答案 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`
}
与您的问题不完全匹配,但这是当我试图将文件分块为字节数组序列时出现的问题。