在读取流的时候常常需要进行组合数组的操作
比较有效率的可以使用Buffer类的BlockCopy来拼合两个数组
方法体【详细可以参考MSDN】
public static void BlockCopy (
Array src,
int srcOffset,
Array dst,
int dstOffset,
int count
)
注意:这里只能使用值数组,如果使用对象数组会报ArgumentException
注意:srcOffset和dstOffset不是数组索引,是数组偏移量
比如5,不代表数组的第6个元素,而是代表偏移5个字节位置
参照MSDN上的例子
开发人员应谨记 BlockCopy 方法使用偏移量访问 src 参数,而不是使用索引或数组上下限等编程构造。例如,如果使用应用程序的编程语言声明一个上限为零,下限为 -50 的 Int32 数组,然后将该数组和偏移量 5 传递给 BlockCopy 方法,则该方法将访问的第一个数组元素是该数组的第二个元素(位于索引 -49 处)。此外,首先访问数组元素 -49 的哪个字节取决于执行应用程序的计算机的 Edian 设置。
因为Int32数组每个元素占4个字节,这里数组偏移是5也就是从第二个元素开始了
下面举一个例子































































运行一下看看各个阶段的输出结果应该就清楚了
其他看了一些网上的朋友还有一些组合数组的方法
~~~~~~~~~~~~~~~~~~~~~~~~~~
byte[] a = new byte[24];
byte[] a = new byte[28];
byte[] dst = new byte[a.Length+b.Length];
a.CopyTo(dst,0);
b.CopyTo(dst,a.Length);
~~~~~~~~~~~~~~~~~~~~~~~~~~
把多个一维数组合并成一个一维数组
public static T[] CombineArray<T>(params T[][] arg)
...{
int len=0;
List<T>list=new List<T>();
foreach (T[] t in arg)
...{
len += t.Length;
foreach(T ti in t)
...{
list.Add(ti);
}
}
T[] array = new T[len];
list.CopyTo(array);
return array;
}
调用如:
int[] box0 = {0, 0, 0, 1, 1, 0, 1, 1};
int[] box1 = {0, 2, 1, 2, 2, 2, 3, 2, 1, 0, 1, 1, 1, 2, 1, 3};
int[] box=CombineArray(box0, box1);
~~~~~~~~~~~~~~~~~~~~~~~~~~~
将两个byte[]加到一个放到ArrayList中,然后再转化为一个byte[]
~~~~~~~~~~~~~~~~~~~~~~~~~~~