Bonjour, je cherche mais en vain un moyen de convertir un tableau du type primitif byte vers un tableau de int.
D'après la spec, la taille d'un byte est de 1 octet, contre 4 octets pour un int.
Je voudrais pouvoir faire ça en gros :
int[] i;
byte[] b = {0,0,0,1};
i = (int[])b
System.out.print(i[0]); affiche : 1
plus dans le contexte :
void fonction(byte[] b) {
int[] data = (int[])b;
for(int i = data.length; i > 0; i--)
data[i] ^= un_bitmask_32_bits
}
i.length serrait egal à b.length/4. Je comprend que le compilateur refuse, il faudrait détruire 'b' pour remplacer par exemple son champ length, et penser aux soucis d'alignements; mais ce qui m'intéresse, ce serrai de pouvoir travailler a partir de données brutes, sans avoir à les recopier.
Je travail sur des socketsChannel qui n'acceptent que des ByteBuffer en entrée, ceci ne fonctionnant qu'avec le type byte[].
J'ai besoin d'effectuer des opérations sur tous les octets qui transitent, faire des opérations booléennes. Il serrait naturel en C de travailler avec un tableau de int voir de long afin de traiter les octets par paquets de 4 ou 8, et ainsi effectuer bien plus vite. Etant au niveau des socket, c'est une fonction très souvent appelée et ce gain ne serrai pas un luxe.
Une idée ? J'aimerai ne pas en arriver à envisager d'écrire du bytecode à la main ?
Message édité par skirb le 26-05-2009 à 00:00:59