我找到了Python的this answer。它适用于C#WebClient.OpenRead吗?
在以下示例中:
代码示例
WebClient client = new WebClient();
Stream stream = client.OpenRead("http://www.MyWebsite.com/FileToDownload.csv");
StreamReader csvFile= new StreamReader(stream);
while (!csvFile.EndOfStream)
{
string line = csvFile.ReadLine();
//do stuff with line
}
答案 0 :(得分:2)
这取决于协议,下载大小与缓冲区大小,甚至可能取决于Web服务器配置。内部使用的HttpWebResponse
的实现从ConnectStream
读取所有内容,它能够透明地去块:
ConnectStream in reference source
即使在需要解码或解压缩的情况下,流也会被正确链接,因此实现显然能够流式传输数据而无需在前面本地下载所有内容。
但实际上.NET http堆栈可以立即缓冲,当你没有读取流结束时也是如此。这些帖子可能是一个有趣的读物:
要证明您的情况,请打开Network Tracing,因为HttpWebResponse将转储有关连接,延续等的信息。或者使用任何其他网络嗅探工具。确保文件足够大以查看效果。
严格来说,它永远不会是“本地流”,但是底层缓冲区将保留所请求文件的数量(如果不是全部的话),而不是你在第一次阅读时要求的数据。
答案 1 :(得分:0)
根据documentation判断,只要您拨打OpenRead
从资源中打开数据已下载的可读流 指定为String的URI。