문제

자바에서
활성 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 프로토콜 결과의 정확성을 보장합니다.

다른 팁

httpurlconnection의 getInputStream ()을 랩핑하는 바이트를 계산하는 자신의 스트림에 getInputStream ()을 감싸십시오. 또는 Apache Commons IO 라이브러리를 더 잘 사용합니다. 그곳에 스트림 구현을 계산합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top