¿Cómo leo bytes en una matriz de bytes? En Java, solía inicializar la matriz de bytes como byte[] b = new byte[100] y luego pasar eso al método correspondiente. Sin embargo, en Kotlin, no puedo inicializar ByteArray con la cantidad de bytes que debe tener el búfer.
En otras palabras, ¿cómo uso esta función?: https://developer.android.com/reference/kotlin/java/io/RandomAccessFile#read(kotlin.ByteArray)
La forma más fácil es usar
File("aaa").readBytes() Ese leerá el archivo completo en ByteArray . Pero debe saber cuidadosamente que tiene suficiente RAM en el montón para hacerlo
El ByteArray se puede crear a través de la llamada ByteArray(100) , donde 100 es su tamaño
Para RandomAccessFile , probablemente sea mejor usarlo en la función readFully , que lee exactamente la cantidad de bytes solicitada.
El enfoque clásico es posible leer un archivo por fragmentos, por ejemplo
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) } }Encontré que esto funcionó muy bien:
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 } } }Úsalo así.
file.chunkedSequence(CHUNK_SIZE).forEach { // Do something with `it` }No es una coincidencia exacta con su pregunta, pero esta es la pregunta que surgió cuando buscaba dividir un archivo en una secuencia de matrices de bytes.