在Java中,
如何計算通過活動HTTP連接發送和接收的字節數?
我想顯示像一些統計數據:計數通過HTTP發送/接收的字節數
Bytes Sent : xxxx Kb
Bytes Received : xxxx Kb
Duration : hh:mm
在Java中,
如何計算通過活動HTTP連接發送和接收的字節數?
我想顯示像一些統計數據:計數通過HTTP發送/接收的字節數
Bytes Sent : xxxx Kb
Bytes Received : xxxx Kb
Duration : hh:mm
很難看出你如何裝飾HttpConnection來計算原始字節數據。您可以使用套接字重新實現HTTP,但這對於達到這些長度必須非常重要。從stackoverflow.com
樣本響應:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 21 Sep 2009 11:46:48 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
Date: Mon, 21 Sep 2009 11:46:48 GMT
Content-Length: 19452
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>...remaining data....
HTTP請求是相當簡單的,所以你可以嘗試使用暴露的信息重建它。形式如下:
// TODO: edge cases, error handling, header delimiter, etc.
int byteCount = 0;
int headerIndex = 0;
while (true) {
String key = httpConnection.getHeaderFieldKey(headerIndex);
if (key == null)
break;
String value = httpConnection.getHeaderField(headerIndex++);
byteCount += key.getBytes("US-ASCII").length
+ value.getBytes("US-ASCII").length + 2;
}
byteCount += httpConnection.getHeaderFieldInt("Content-Length",
Integer.MIN_VALUE);
該實現是不完整的,未經測試。您需要詳細瞭解HTTP protocol的詳細信息,以確保結果的準確性。
裹HttpURLConnection的的getInputStream()和getOutputStream方法()在自己的流表示,計數,通過他們去的字節數。或者甚至更好地使用Apache Commons IO庫 - 他們在那裏計數流實現。
reading輸入輸出流不會計算HEADER長度。數量總是比原來少。而應該看到WIRESHARK中http連接使用的字節(用於採樣) – 2011-12-08 09:10:55
你使用什麼機制? HttpURLConnection的?你是否需要接收/發送的字節包含標題或僅包含正文? – McDowell 2009-09-19 17:50:57
其實,我真的想在Java ME中做到這一點,但我沒有收到任何答案,所以我修改了我的Java SE問題,以爲我可以以某種方式解決問題。那麼JavaME有HttpConnection接口http://java.sun.com/javame/reference/apis/jsr118/ – 2009-09-19 17:57:30
我想包括所有的字節,因爲我計算成本取決於通過網絡發送和接收的字節。 – 2009-09-19 17:59:09