我正在编写一个需要接收大量数据的控制台应用程序。我试着像这样编码,
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
responseText = sr.ReadToEnd();
}
Console.WriteLine(responseText);
但是这段代码需要等待整个响应才能将数据写出到控制台。我如何重新编码以在收到数据时将数据流式传输到控制台?
感谢。
答案 0 :(得分:1)
如果要获取大数据,则需要异步使用HttpWebRequest。
使用HttpWebRequest.BeginGetResponse()
HttpWebRequest webRequest;
void StartWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest),null);
}
void FinishWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
异步操作完成后,将调用回调函数。您至少需要从此函数调用EndGetResponse()。
答案 1 :(得分:0)
char[] chars = new char[1024];
int numread = 0;
while ((numread = sr.Read(chars, 0, chars.Length)) > 0)
Console.Write(new string(chars));
Console.WriteLine();
答案 2 :(得分:0)
尝试一次阅读一行:ReadLine()
:
while (!sr.EndOfStream)
{
responseText = sr.ReadLine();
Console.WriteLine(responseText);
}
答案 3 :(得分:0)
这就是ReadToEnd()
的含义。
将所有内容写入文件:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var responseStream = response.GetResponseStream();
using (var fileStream = new FileStream("C:\\temp\\myfile.avi"))
{
var buffer = new byte[8192];
while (true)
{
var bytesRead = responseStream.Read(buffer, 0, buffer.Length);
if (bytesRead <= 0)
break;
fileStream.Write(buffer, 0, bytesRead);
}
}