1

Javaでは
、アクティブなHTTP接続を介して送受信されたバイトをどのようにカウントできますか?
次のような統計を表示したい:

Bytes Sent     : xxxx Kb   
Bytes Received : xxxx Kb  
Duration       : hh:mm
4

2 に答える 2

1

HTTPURLConnectionのgetInputStream()とgetOutputStream()を、それらを通過するバイトをカウントする独自のストリームにラップします。または、ApacheCommonsIOライブラリを使用することをお勧めします。そこにはカウントストリームの実装があります。

于 2009-09-19T17:48:05.127 に答える
1

生のバイトデータをカウントするために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プロトコルの詳細を調べる必要があります。

于 2009-09-21T11:54:57.500 に答える