将一个大的byte[]数组拆分多个byte数组
每次发送一个4KB的包,如果byte[]较大,则会拆分为多个包,下面的循环不会写了,我用的是.net2.0的程序,在网上搜索到的都是文件传输如:http://www.cnblogs.com/chenxizhang/archive/2009/06/29/1513445.html 单这个不符合我的程序。分完之后,我还要合并的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
List<byte[]> splitteddata = SplitArray<byte>(data, 4);
foreach (var item in splitteddata)
{
Console.WriteLine(string.Join(", ", item.Select(x => x.ToString())));
}
byte[] d = JoinArray<byte>(splitteddata);
Console.WriteLine(string.Join(", ", d.Select(x => x.ToString())));
}
static List<T[]> SplitArray<T>(T[] data, int size)
{
List<T[]> list = new List<T[]>();
for (int i = 0; i < data.Length / size; i++)
{
T[] r = new T[size];
Array.Copy(data, i * size, r, 0, size);
list.Add(r);
}
if (data.Length % size != 0)
{
T[] r = new T[data.Length % size];
Array.Copy(data, data.Length - data.Length % size, r, 0, data.Length % size);
list.Add(r);
}
return list;
}
static T[] JoinArray<T>(List<T[]> arraies)
{
List<T> list = new List<T>();
foreach (T[] item in arraies)
{
for (int i = 0; i < item.Length; i++) list.Add(item[i]);
}
T[] r = new T[list.Count];
int n = 0;
foreach (T x in list)
{
r[n++] = x;
}
return r;
}
}
}