Comment créer un tableau de tableaux d'octets en java
Je veux créer un tableau de byte[]
.
Quand j'essaie:
byte[] data = new byte[10];
C'est un tableau de byte
et pas un tableau de byte[]
.
Grâce
byte[][] data = new byte[10][10]
?
Vous devez vous connecter pour publier un commentaire.
À l'adresse de la confusion à propos des "tableaux de tableaux" et 2D tableaux:
Java n'a pas vraiment de tableaux 2D. Au moins, pas de la façon dont beaucoup de gens pensent d'eux, où ils ressemblent à une matrice, et que vous avez des lignes et des colonnes et le même nombre d'éléments dans chaque ligne.
Vous peut utiliser un "tableau de tableaux" comme un tableau 2D. Si vous voulez une matrice de 5 x 8 entiers, vous pouvez dire
Mais Java n'est pas l'application de la "matrice-ness" ou "2D-ness" d'un tableau. Ce qu'il vous donne est un tableau de 5 références, dont chacun se réfère à un autre tableau d'entiers. Chaque référence commence en se référant à un tableau de 8 entiers, mais ce n'est pas appliquée; plus tard, vous pourrez dire
ou
et maintenant votre tableau n'est plus vraiment un tableau 2D (comme nous avons l'habitude de penser), mais Java ne vous empêche pas de le faire.
Ainsi, alors que vous pouvez souvent voir quelque chose comme
utilisés dans les manuels de créer un tableau 2D, c'est la même syntaxe que pour un tableau de tableaux, et Java en fait le traite comme un tableau de tableaux, tous n'ont pas la même taille.
Si vous souhaitez créer un tableau dont les éléments sera finalement des tableaux, mais qui sont
null
pour l'instant, vous pouvez le faire comme ceci:qui définit
bytesArray
à un tableau de 10null
références, n'importe qui pourrait être fixée plus tard:Ce serait la façon de commencer, si vous voulez un "ragged tableau" des tableaux qui ne sont pas tous de la même longueur.
En Java, un tableau où chaque élément est lui-même un tableau est effectivement juste un tableau 2D, bien que Java n'exige pas que chaque ligne ont le même nombre d'éléments.
Dans ce cas particulier où vous avez une
List<byte[]>
et vous souhaitez le transformer en un tableau où chaque élément du tableau est lui-même unbyte
tableau, vous pouvez utiliser:ou, plus succinctement, mais de moins en moins, évidemment:
qui utilisent ressemble:
Noter que dans les deux cas ci-dessus les éléments de la matrice sont exactement les mêmes tableaux comme ceux qui sont stockés dans la liste, pas une copie. Par conséquent, si vous modifiez l'un de l'original
byte[]
éléments dans la liste, il va aussi changer la version accessible via le tableau.Essayez ceci:
byte[][] tableaux = new byte[5][10];
byte[]
est - un tableau 2DByte
àbyte
et je vais upvote ta réponse, car sinon, il est correct. (Et j'espère que les trois downvoters copie répondre, ou au moins expliquer eux-mêmes.)byte
, pasByte
- vous ne savez pas comment utiliser.toArray
(si c'est possible) avec une primitive.Vous dire comme ça?
byte
, pas un tableau debyte[]
byte[]
est - un tableau 2D! Je vais ré-ouvrir votre question et d'élaborer desDans votre exemple, vous créez un tableau d'octets, si vous souhaitez créer un tableau de tableaux d'octets, vous devez créer un tableau à deux dimensions d'octets:
byte[][] bytesArray = new byte[10][10];
Vous serait alors en mesure d'accéder à votre tableau d'octets comme suit:
bytesArray[0]; //returns a byte[]