求帮助:
下面的代码 本人用注释的代码接收byte[]数据时,数据长度是对的,但是数据只能收到前面的一小部分,其它代码不变用最后两行接收string类型时数据是全的,而且转换成其它对应类时也是正常的,讨教下是什么原因引起的?
谢谢!
下面的代码 本人用注释的代码接收byte[]数据时,数据长度是对的,但是数据只能收到前面的一小部分,其它代码不变用最后两行接收string类型时数据是全的,而且转换成其它对应类时也是正常的,讨教下是什么原因引起的?
谢谢!
WebResponse wr = request.GetResponse(); Stream getStream = wr.GetResponseStream(); //byte[] currentChunk = new byte[wr.ContentLength]; //getStream.Read(currentChunk, 0, currentChunk.Length); StreamReader sr = new StreamReader(getStream, Encoding.UTF8); string receiveData = sr.ReadToEnd();
解决方案
40
你这句byte[] currentChunk = new byte[wr.ContentLength];设置数组长度不对。官方解释ContentLength: ContentLength 属性包含与响应一起返回的 Content-Length 标头的值。假如响应中未设置 Content-Length 标头,则将 ContentLength 设置为值 -1。 你应该这么写
byte[] currentChunk = new byte[2048]; // 缓存buffer int rc=0; // 每次实际收到的字节数 using(MemoryStream ms = new MemoryStream ()) { while((rc = getStream.Read(currentChunk, 0, currentChunk.Length)) > 0) { ms.Writ(currentChunk , 0., rc); // 将当次收到的字节写入流 } currentChunk = ms.ToArray(); // 将流转换为byte[] }