客户端接受图片数接受后,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>,它没有大小限制。收到多谢数据都往里放就是,但太浪费空间。
我的意思可以是这样的:
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#网络编程吧 ,我才开始学,很喜欢,不过还不会