Découpage des tableaux d'octets en Java
Je suis en train de découper un tableau d'octets à tailler la première partie du tableau. Je suis en utilisant ByteBuffer mais il ne se comporte pas comme je m'attends.
byte[] myArray = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(myArray);
buf.position(5);
ByteBuffer slicedBuf = buf.slice();
byte[] newArray = slicedBuf.array();
J'attendrais la taille de newArray à 5, contenant uniquement la dernière partie de mon ByteBuffer. Au lieu de cela, la pleine tableau d'octets est retourné. Je comprends que c'est parce que la "sauvegarde de la mémoire tampon" est la même tout le long.
Comment puis-je tranche pour n'avoir que la partie souhaitée de la matrice?
EDIT: Ajouté contexte
Les octets sont reçues à partir du réseau. Le tampon est constitué comme ceci :
[ SHA1 hash ] [ data... lots of it ]
J'ai déjà une fonction qui prend un tableau d'octets en tant que paramètre et de calculer le hash SHA1. Ce que je veux, c'est à couper le tampon complète à ne laisser passer que les données sans attendre de hachage.
source d'informationauteur Eric
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Tableaux.copyOfRange
méthode. Par exemple:La
ByteBuffer
vous avez créé est en cours de sauvegarde par pile. Lorsque vous appelezslice()
vous pouvez effectivement recevoir un spécifique vue de données:Afin de l'appelant
array()
sur ce qui est retournéByteBuffer
renvoie la sauvegarde de tableau dans son intégralité.Pour extraire tous les octets à partir de ce point de vue, vous pouvez faire:
Les octets à partir de ce point de vue, être copiés dans le nouveau tableau.
Modifier pour ajouter des commentaires ci-dessous: Il est intéressant de noter que, si vous vous êtes intéressés à faire de la copie d'octets à partir d'un
byte[]
à l'autrebyte[]
il n'y a pas de raison d'utiliser unByteBuffer
; il suffit de copier les octets.