首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebRequest GetResponseStream读取字节数

WebRequest GetResponseStream读取字节数
EN

Stack Overflow用户
提问于 2011-12-13 22:11:44
回答 1查看 8.2K关注 0票数 6

我正在尝试从ResponeStream读取字节,但是我怎么能说等待数据呢?

如果我在GetResponseStream之后设置一个断点并等待几秒钟,一切都会正常工作。使用StreamReader.ReadToEnd()也不错,但我想自己读取字节。

代码语言:javascript
复制
byte[] response = null;

int left = 0;
int steps = 0;
int pos = 0;

int bytelength = 1024;

OnReceiveStart();

using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse()) {
    using (Stream sr = webResponse.GetResponseStream()) {

        response = new byte[(int)webResponse.ContentLength];

        left = (int)webResponse.ContentLength % bytelength;
        steps = (int)webResponse.ContentLength / bytelength;
        pos = 0;

        for (int i = 0; i < steps; i++) {
            sr.Read(response, pos, bytelength);
            pos += bytelength;
            OnReceiveProgress((int)webResponse.ContentLength, pos);
        }

        if (left != 0) {
            sr.Read(response, pos, left);
        }

        sr.Close();
    }
    webResponse.Close();
}

OnReceiveProgress(1, 1);

OnReceiveFinished();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 22:16:15

只是不要把它拆分成相同数量的步骤--相反,只要继续循环阅读,直到你完成:

代码语言:javascript
复制
while (pos < response.Length)
{
    int bytesRead = sr.Read(response, pos, response.Length - pos);
    if (bytesRead == 0)
    {
        // End of data and we didn't finish reading. Oops.
        throw new IOException("Premature end of data");
    }
    pos += bytesRead;
    OnReceiveProgress(response.Length, pos);
}

请注意,您必须使用Stream.Read的返回值-您不能假设它将读取您所请求的所有内容。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8490605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档