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

客户端接受图片数接受后,byte[] 的大小怎么设定,已经怎么把接受的byte[]组合成一个byte[]?

2011-12-23 
客户端接受图片数接受后,byte[] 的大小如何设定,已经如何把接受的byte[]组合成一个byte[]??主要是 接受的

客户端接受图片数接受后,byte[] 的大小如何设定,已经如何把接受的byte[]组合成一个byte[]??
主要是 接受的图片数据要时时的显示
摸拟视频效果!
  byte[] bytes = new byte[8192];<--大小如何设置??

  int _i= ns.Read(bytes, 0, bytes.Length);




StringBuilder sb = new StringBuilder();
--组合string
 string _str = UnicodeEncoding.ASCII.GetString(bytes);
 byte[] bt2 = UnicodeEncoding.ASCII.GetBytes(_str);<--bt2 的数据怎么和bytes不一样?!?!
 sb .Append(_str);

[解决办法]
对于大小未知的情况,接收是分次进行的,会有一个小缓存用于接收一次数据。当你的大缓存容量不够时,在接收完小缓存数据之后再增长大缓存即可;
对于大小已知的情况,比如有FileStream之类的,你完全可以取出长度生成缓冲区。
[解决办法]
byte不能动态的改变大小。
1:如果不考虑效率,你可以用List<byte>,它没有大小限制。收到多谢数据都往里放就是,但太浪费空间。
我的意思可以是这样的:

C# code
List<byte[]> buffers = new List<byte[]>();while(true){    byte[] tempBuffer = new byte[SmallBufferSize];    //我假设DataSource是数据源,它的Fillbuffer方法填充指定的byte[],并且最多填充SmalLBufferSize大小。    //返回实际填充的长度(可能不足SmallBufferSize)    int k = DataSource.FillBuffer(tempBuffer,SmallBufferSize);    if(k<SmallBufferSize)    {       byte[] tempBufferActual = new byte[k];       tempBuffer.CopyTo(tempBufferActual,0,k);       tempBuffer = tempBufferActual;    }    //添加进总的Buffer当中    buffers.Add(tempBuffer);    //如果返回的数据长度不是SmallbufferSize表示已读到文件尾,退出    if(k<SmallBufferSize)break;  }//求出总缓冲区长度int bufferLength = 0;foreach(byte[] ba in buffers){    bufferLength +=ba.Length;}byte[] TotalBuffer = new byte[bufferLength];int offset = 0;foreach(byte[] ba in buffers){    ba.CopyTo(TotalBuffer,offet,ba.Length);    offset+=ba.Length;}//TotalBuffer就是你要的总的Buffer了
[解决办法]
你最好评估一下,一张图片多大!!最好不要把一张在拆分了
[解决办法]
y应该是C#网络编程吧 ,我才开始学,很喜欢,不过还不会

热点排行