WebResponse 接收byte[]不全

.Net技术 码拜 9年前 (2016-02-29) 1102次浏览
求帮助:
下面的代码 本人用注释的代码接收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[]
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WebResponse 接收byte[]不全
喜欢 (0)
[1034331897@qq.com]
分享 (0)