WebRequest GetResponseStream 读取字节
我正在尝试从 ResponeStream 读取字节,但我怎么能说要等待数据呢?
如果我在 GetResponseStream 之后设置断点并等待几秒钟,一切正常。 使用 StreamReader.ReadToEnd() 也可以正常工作,但我想自己读取字节。
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();
I'm trying to read bytes from an ResponeStream, but how can i say to wait for the data?
If i set a breakpoint after GetResponseStream and wait a few seconds all works fine.
Using StreamReader.ReadToEnd() also works fine, but i want to read the bytes myself.
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();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只是不要将其分解为相同数量的步骤 - 相反,只需继续循环读取直到完成:
请注意,您必须使用
Stream.Read< 的返回值/code> - 你不能假设它会读取你所要求的所有内容。
Just don't break it into your equal number of steps - instead, just keep reading in a loop until you're done:
Note that you must use the return value of
Stream.Read
- you can't assume it will read everything you've asked for.