簡體   English   中英

在Java中,如何計算下載期間網頁的下載大小?

[英]In Java, how I count the size of the download of a webpage during the download?

我想做這個:

我有下載的最大限制大小(例如:10MB)。 我開始下載網頁。 如果在達到限制之前頁面的下載沒有完成,我將停止下載。

我在這里做了類似的問題: 在Java中,可以確定下載前的網頁大小嗎? ,但這是在開始下載之前發現頁面的大小,但是某些服務器未發送此信息。 現在我需要在下載期間進行控制。

他們告訴我使用CountInputStream 這是這樣嗎? 我使用HttpUrlConnection ,所以下載不是用getInputStream完成嗎?

如果Web服務器支持它,則可以查看Content-Length標頭,它可以告訴您事情的大小:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

如果服務器/項目不支持內容長度,則您必須閱讀整個內容並僅計算字節數...

您所鏈接的答案似乎包含了您所需要的其余大部分信息,這是否與您的問題幾乎完全相同?

您可以執行HTTP HEAD請求,但這只會返回網頁的“ Content-Length”。

網頁的大小是一件很有趣的事情,因為網頁包含許多其他文檔(例如圖形)。 Content-Length並不是文檔的“整個大小”,即使此時您詢問內容的長度,也不能保證內容的長度在幾毫秒后就會相同。

對於靜態頁面,內容長度可能是可信任的。 但是,對於動態內容,我認為內容長度有時是錯誤的,或者總是是錯誤的。

如果您正在使用HttpUrlConnection通過HTTP從遠程資源讀取,則這意味着您正在使用HttpUrlConnection.getInputStream()讀取由遠程資源返回的數據。

要計算從連接讀取時讀取的字節數,只需...計算從inputStream讀取時的字節數。 例如:

HttpUrlConnection conn = ...;
byte[] dataBuffer = new byte[MAX_BYTES];
InputStream stream = conn.getInputStream();
int bytesRead, totalRead = 0;
while (bytesRead != -1) {
    bytesRead = stream.read(dataBuffer, totalRead, bufferLength);
    totalRead += bytesRead;
    if (totalRead > MAX_BYTES) throw new FileTooBigException(...);
}

如果您確保啟用HTTP 1.1保持活動狀態(連接:保持活動狀態)並且服務器同意,則服務器必須發送內容長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM