首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

将一个大的byte[]数组拆分多个byte数组解决方法

2013-10-11 
将一个大的byte[]数组拆分多个byte数组每次发送一个4KB的包,如果byte[]较大,则会拆分为多个包,下面的循环

将一个大的byte[]数组拆分多个byte数组
每次发送一个4KB的包,如果byte[]较大,则会拆分为多个包,下面的循环不会写了,我用的是.net2.0的程序,在网上搜索到的都是文件传输如:http://www.cnblogs.com/chenxizhang/archive/2009/06/29/1513445.html 单这个不符合我的程序。分完之后,我还要合并的。


[解决办法]
引用:
 public void Send ( Socket handler, byte[] data )
        {
            if (handler != null && handler.Connected)
            {
                try
                {
                    handler.Send(data);
                }
                catch
                {
                }
            }
        }

这个data数据太大,在客户端接收的时候很慢哦,导致界面上显示也很慢。
由于data太大导致从服务器发送数据到客户端很慢。不知道大家有没有解决的方法哦。

界面显示不是等接收完之后再做?数据大导致速度慢这是不可避免的。
[解决办法]
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;
        }
    }
}



1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
13
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
Press any key to continue . . .
[解决办法]
采用异步接收啊,不要直接UI线程里处理Socket。

热点排行