如何在运行时增加byte []大小?

28

我需要在运行时增加byte[]数组大小。
如何在运行时增加byte[]数组大小?


可能是更改数组大小的重复问题。 - nawfal
5个回答

75

为什么似乎没有人知道 Array.Resize

 Array.Resize(ref myArray, 1024);

简单易行。

注:根据MSDN上的一条评论,显然在3.0版的MSDN文档中缺少了这个内容。


@Brian:谢谢,我在回答中复制了错误的链接,抱歉。 - sehe
9
请注意,这会创建一个新的数组,如果你在其他地方有对旧数组的引用,那么它不会被更新。 - Albin Sunnanbo
2
+1 只是为了知道这个存在...然而有人可能会挑剔地说,这实际上并没有改变传递数组的大小。 - Richard
1
@AlbinSunnanbo 它确实会更新旧数组,这就是为什么使用 ref 的原因。 - Alex from Jitbit
@Alex是正确的。但请注意,它确实复制并指向一个新数组。 - joe
@AlexfromJitbit 这是一个语义问题: "数组" 是变量还是它所指向的内存?这个函数确实更新了变量,但它(曾经)指向的内存仍然是相同大小。我认为内存块才是真正的数组,因此说这个函数实际上没有调整原始数组的大小是正确的。 - Arthur Tacca

17

你不能:数组大小是固定的。1

要么使用可调整大小的集合(例如:List<byte>),要么创建一个更大的新数组并将原始数组的内容复制到其中。


1即使使用Array.Resize,也不会修改传递的数组对象:它只是创建一个新的数组并复制元素。它只是为了节省您编写这个过程所需的代码。这种差异很重要:对旧数组的其他引用将继续看到旧数组。


7
你可以使用 Array.Copy(..) 分配一个新的数组并将字节复制过去。
byte[] oldArr = new byte[1024];
byte[] newArr = new byte[oldArr.Length * 2];

System.Array.Copy(oldArr, newArr, oldArr.Length);

oldArr = newArr;

@jams:当使用Array.Resize时,临时变量是您不需要的(微笑)。 - sehe
@所有人关于 tmp - 我把 tmp 改成了 oldArr,但是忘记在方法中修改它了,我的错。 - Kevin

3
如果你需要增加它,为什么不一开始就使用List<byte>呢?

2

数组是固定大小的,无法在运行时进行动态更改。

您唯一的选择是创建所需大小的新数组,并将所有字节从旧数组复制到新数组中。

但为什么要这样折磨自己,而不使用 List<byte> 并随意添加或删除元素呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接