日期:2014-05-18  浏览次数:20799 次

客户端接受图片数接受后,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#网络编程吧 ,我才开始学,很喜欢,不过还不会