Je veux obtenir un tableau d'octets (Array [Byte]) à partir de quelque part (lire à partir d'un fichier, d'une socket, etc) et ensuite fournir un moyen efficace d'extraire des bits (par exemple fournir une fonction bit entier de l'offset N dans le tableau). Je voudrais ensuite envelopper le tableau d'octets (en le cachant) fournissant des fonctions pour extraire les bits de la matrice (probablement en utilisant des valeurs paresseuses pour chaque bit à retirer).Quel est le moyen le plus efficace de faire des tableaux d'octets immuables dans Scala?
J'imagine avoir une classe enveloppante qui prend un type de tableau d'octets immuable dans le constructeur pour prouver que le contenu du tableau n'est jamais modifié. IndexedSeq [Byte] semblait pertinent, mais je ne pouvais pas savoir comment passer de Array [Byte] à IndexedSeq [Byte].
La partie 2 de la question est si j'ai utilisé IndexedSeq [Byte] le code résultant sera-t-il plus lent? J'ai besoin que le code s'exécute aussi vite que possible, donc je m'en tiendrai à Array [Byte] si le compilateur peut faire un meilleur travail avec.
Je pourrais écrire une classe wrapper autour du tableau, mais cela ralentirait les choses - un niveau supplémentaire d'indirection pour chaque accès aux octets dans le tableau. Les performances sont critiques en raison du nombre d'accès au tableau requis. J'ai besoin de code rapide, mais je voudrais bien faire le code en même temps. Merci!
PS: Je suis un débutant Scala.
Désolé, en tant que débutant Scala je ne comprends pas votre exemple. Êtes-vous en train de dire que l'utilisation de Array [Byte] fera beaucoup de déballage? Aussi je n'étais pas sûr de savoir comment déclencher la vue implicite. J'ai ajouté naïvement ": IndexedSeq [Byte]" après l'instanciation de mon tableau mais il s'est plaint de "incompatibilité de type". En outre, wrapByteArray() semble renvoyer un IndexedSeq [Byte] mutable, pas la version immuable. –