如何在java中创建字节数组数组

如何在java中创建字节数组数组,java,arrays,byte,Java,Arrays,Byte,我想创建一个字节[]数组。 当我尝试时: byte[] data = new byte[10]; 这是一个字节的数组,而不是字节[]的数组。 谢谢试试这个: 字节[][]数组=新字节[5][10] 你是说像这样 byte[][] data = new byte[][]{byteArray1, byteArray2, byteArray3}; 在您的示例中,您正在创建一个字节数组,如果要创建一个字节数组数组,则必须创建一个二维字节数组: byte[]bytesArray=新字节[10][10]

我想创建一个
字节[]
数组。 当我尝试时:

byte[] data = new byte[10];
这是一个
字节的数组,而不是
字节[]
的数组。 谢谢

试试这个:

字节[][]数组=新字节[5][10]

你是说像这样

byte[][] data = new byte[][]{byteArray1, byteArray2, byteArray3};

在您的示例中,您正在创建一个字节数组,如果要创建一个字节数组数组,则必须创建一个二维字节数组:

byte[]bytesArray=新字节[10][10]

然后,您将能够访问字节数组,如下所示:


字节数组[0];//返回一个字节[]

在Java中,每个元素本身就是一个数组的数组实际上只是一个2D数组,尽管Java不要求每行具有相同数量的元素

在这种特殊情况下,如果您有一个
列表
,并且希望将其转换为一个数组,其中数组的每个元素本身就是一个
字节
数组,则可以使用:

int rows = myList.size();
byte[][] myArray = new byte[rows][];

int i = 0;
for (byte[] col : myList) {
    myArray[i++] = col;
}
或者,更简洁但不那么明显:

byte[][] myArray = myList.toArray(new byte[0][]);
在使用中看起来像:

List<byte[]> myList = new ArrayList<>();
myList.add(new byte[]{1,2,3,4});
myList.add(new byte[]{5,6,7});
myList.add(new byte[]{8,9});

byte[][] myArray = myList.toArray(new byte[0][]);

for (byte[] b : myArray) {
    for (byte c : b) {
        System.out.println(c);
    }
    System.out.println();
}
List myList=new ArrayList();
add(新字节[]{1,2,3,4});
add(新字节[]{5,6,7});
add(新字节[]{8,9});
字节[][]myArray=myList.toArray(新字节[0][]);
for(字节[]b:myArray){
for(字节c:b){
系统输出打印ln(c);
}
System.out.println();
}

请注意,在上述两种情况下,数组的元素与列表中存储的元素完全相同,而不是副本。因此,如果修改列表中的一个原始
字节[]
元素,它还将更改通过数组访问的版本。

要解决有关“数组数组”和二维数组的一些混淆:

Java实际上没有2D数组。至少,不像很多人想象的那样,它们看起来像一个矩阵,每行有行和列,每行有相同数量的元素

可以将“数组数组”用作二维数组。如果你想要一个5×8整数的数组,你可以说

int[][] arr = new int[5][8];
但是Java并没有强制执行数组的“矩阵性”或“二维性”。它提供的是一个包含5个引用的数组,每个引用引用另一个整数数组。每个引用一开始都引用一个由8个整数组成的数组,但这不是强制的;你以后可以说

arr[2] = new int[113];

现在,您的数组不再是一个真正的2D数组(正如我们通常认为的那样),但Java不会阻止您这样做

所以,虽然你可能经常看到

byte[][] 
在教科书中用于创建2D数组,其语法与数组数组相同,Java实际上将其视为数组数组,并非所有数组都必须具有相同的大小

如果您想创建一个数组,其元素最终将是数组,但现在是
null
,您可以这样做:

byte[][] bytesArray = new byte[10][];
它将
bytesArray
设置为10个
null
引用的数组,以后可以设置其中的任何一个:

bytesArray[4] = new byte[17];

如果你想要一个不完全相同长度的数组的“不规则数组”,那么这就是开始的方法。

byte[][]data=new byte[10][10]
?这是一个2D数组。我想要一个字节[]数组,就像你可以做一个int数组一样。@Alex这就是
byte[]
数组是什么-一个2D数组array@Alnitak不我有一个列表,我想把它转换成一个数组。所以我应该创建一个字节[]的数组,我不想要2D数组。简单的问题数组是二维数组。@Alex这里的每个人都告诉你同样的事情,他们是正确的:数组数组是二维数组。比如:byte[]\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
这个答案确实描述了一个“字节数组数组”,这正是你问题中所要求的。@Alex是的,因为这就是
字节[]
数组-一个2D数组!我将重新提出你的问题,然后elaborate@Alex在Java中,“数组数组数组”和2D数组之间没有区别。有些语言对这两个方面有不同的概念,但Java不是其中之一。字节[]是类型!!
bytesArray[4] = new byte[17];