将字节数组赋值给二维字节数组

本文关键字:字节数 数组 字节 二维 赋值 | 更新日期: 2023-09-27 18:12:12

我想把一个字节[]赋值给一个字节[][],但这会给我运行时错误:

对象引用未设置为对象的实例。

这是我的代码:

for (int i = 0; i < NumberOfChunks; i++)
{
    byte[][] myFile = new byte[NumberOfChunks][];
    myFile[i][0] = buffer[i]; // IT STOPS HERE AND GIVES ME THE ERROR
    if ((i + 1) == NumberOfChunks)
    {
        do sth....
    }
}

将字节数组赋值给二维字节数组

[][]是不同于[,]的数组。

所以分配第一个维度你会得到一个指向可能数组的空指针数组

试试这个:

byte[][] myFile = new byte[NumberOfChunks][];
for (int i = 0; i < NumberOfChunks; i++)
{
    myFile[i] = new byte[NumberOfItems];
    myFile[i][0] = buffer[i]; // IT STOPS HERE AND GIVES ME THE ERROR
    if ((i + 1) == NumberOfChunks)
    {
        do sth....
    }
}

myFile[i][0]为null,因为您只分配了第一个维度。在循环开始时,数组看起来像这样:

myFile -> [null, null, null, ...]

你可以通过迭代数组来分配另一个维度:

byte[][] myFile = new byte[NumberOfChunks][];
for (int i = 0; i < NumberOfChunks; ++i)
{
    myFile[i] = new byte[NumberOfChunks];
}

结果将是:

myFile -> [byte[], byte[], byte[] ...]

因此myFile[i]将指向byte[]中的一个而不是空引用。

作为旁注,您可以使用2d数组byte[,]来同时分配两个维度。只是要注意,性能是不相等的。