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

时间:2014-09-03 19:45:27

标签: java arrays byte

我想创建一个byte[]的数组。 当我尝试:

byte[] data = new byte[10];

这是byte的数组,而不是byte[]的数组。 感谢

5 个答案:

答案 0 :(得分:4)

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

在这种特殊情况下,你有一个List<byte[]>并希望将其变成一个数组,其中数组的每个元素本身都是byte数组,你可以使用:

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();
}

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

答案 1 :(得分:4)

解决一些关于“数组数组”和2D数组的混淆:

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

可以使用“数组数组”作为2D数组。如果你想要一个5 x 8整数的数组,你可以说

int[][] arr = new int[5][8];

但Java并没有强制执行数组的“矩阵”或“2D-ness”。它给你的是一个包含5个引用的数组,每个引用引用另一个整数数组。每个引用都从引用8个整数的数组开始,但这不是强制执行的;你可以稍后说

arr[2] = new int[113];

arr[2] = null;

现在你的数组不再是一个2D数组(正如我们通常所想的那样),但Java不会阻止你这样做。

所以,虽然你经常会看到像

这样的东西
byte[][] 

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

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

byte[][] bytesArray = new byte[10][];

bytesArray设置为10个null引用的数组,其中任何一个都可以在以后设置:

bytesArray[4] = new byte[17];

如果你想要一个长度不一样的“不规则阵列”数组,这将是开始的方式。

答案 2 :(得分:2)

试试这个:

byte [] [] arrays = new byte [5] [10];

答案 3 :(得分:1)

你的意思是这样吗?

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

答案 4 :(得分:1)

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

byte[][] bytesArray = new byte[10][10];

然后您可以按如下方式访问您的字节数组:

bytesArray[0]; // returns a byte[]