[英]When do a C# Webclient.OpenRead actually download data?
我找到了Python的答案 。 它適用於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
}
它取決於協議,下載大小與緩沖區大小,甚至可能取決於Web服務器配置。 內部使用的HttpWebResponse
的實現從ConnectStream
讀取所有內容, ConnectStream
能夠透明地去塊:
即使在需要解碼或解壓縮的情況下,流也被正確鏈接,因此實現顯然能夠流式傳輸數據而無需在本地預先下載所有內容。
但實際上,當你不讀取流結束時,.NET http棧會盡可能地立即緩沖 。 這些帖子可能是一個有趣的讀物:
要證明您的情況,請打開網絡跟蹤 ,因為HttpWebResponse將轉儲有關連接,延續等的信息。或者使用任何其他網絡嗅探工具。 確保文件足夠大以查看效果。
嚴格來說,它永遠不會是“本地流”,但底層緩沖區將保留所請求文件的數量(如果不是全部),而不是您在第一次閱讀時要求的數量。
從文檔判斷,一旦調用OpenRead
,就會發送HTTP GET請求
為從資源下載的數據打開可讀流,並將URI指定為String。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.