Quiero obtener una matriz de bytes (Array [Byte]) desde algún lugar (leer desde el archivo, desde el socket, etc.) y luego proporcionar una forma eficiente de extraer bits de ella (por ejemplo, proporcionar una función para extraer un 32- bit entero desde el desplazamiento N en la matriz). Luego me gustaría envolver la matriz de bytes (que la oculta) proporcionando funciones para extraer bits de la matriz (probablemente usando vago val para cada bit para extraer).¿Cuál es la forma más eficiente de hacer matrices de bytes inmutables en Scala?
Me imagino tener una clase de envoltura que toma un tipo de matriz de bytes inmutables en el constructor para probar que el contenido de la matriz nunca se modifica. IndexedSeq [Byte] parece relevante, pero no pude encontrar la forma de pasar de Array [Byte] a IndexedSeq [Byte].
La parte 2 de la pregunta es si utilicé IndexedSeq [Byte] ¿el código resultante será más lento? Necesito que el código se ejecute lo más rápido posible, así que me quedaría con Array [Byte] si el compilador pudiera hacer un mejor trabajo con él.
Podría escribir una clase contenedora alrededor de la matriz, pero eso disminuiría la velocidad, un nivel adicional de indirección para cada acceso a bytes en la matriz. El rendimiento es crítico debido a la cantidad de accesos de matriz que se requerirán. Necesito un código rápido, pero me gustaría hacer el código muy bien al mismo tiempo. ¡Gracias!
PD: Soy un novato de Scala.
Lo siento, como novato de Scala no entiendo tu ejemplo. ¿Estás diciendo que usar Array [Byte] hará un montón de unboxing? Además, no estaba seguro de cómo activar la vista implícita. Ingenuamente agregué ": IndexedSeq [Byte]" después de la instanciación de la matriz, pero se quejó con "type mismatch". Además, wrapByteArray() parece devolver un IndexedSeq mutable [Byte], no la versión inmutable. –