2014-06-24 1 views
1

초당 크기 전송 속도를 표시하는 기능이 필요합니다.파일을 계속 다운로드하는 동안 초당 전송률을 표시하는 방법

자바 코드로 웹에서 파일을 다운로드하고 파일을 다운로드하는 동안 초당 전송 속도를 표시해야합니다.

enter image description here

아래의 코드는,이 here 에서 완전히 내 찍은되지 유의하시기 바랍니다 다운로드가 완료되면 전송 속도를 계산,하지만 난 현재 어떻게 코드를 만드는 아무 생각이 없습니다 만 아래의 코드 매초마다 전송률을 표시하려면 개념적 아이디어 또는 코드 제안이 필요합니까?

public static void main(String argc[]) throws Exception { 

long totalDownload  = 0;      // total bytes downloaded 
final int BUFFER_SIZE = 1024;     // size of the buffer 

byte[] data = new byte[BUFFER_SIZE];    // buffer 
BufferedInputStream in = new BufferedInputStream(

    new URL(
      "http://ipv4.download.thinkbroadband.com:8080/5MB.zip") 
      .openStream()); 

int dataRead  = 0;       // data read in each try 
long startTime  = System.nanoTime();   // starting time of download 
while ((dataRead = in.read(data, 0, 1024)) > 0) { 
    totalDownload += dataRead;     // adding data downloaded to total data 
    System.out.println(totalDownload); 
} 

/* download rate in bytes per second */ 
float bytesPerSec = totalDownload 
    /((System.nanoTime() - startTime)/1000000000); 
System.out.println(bytesPerSec + " Bps"); 

/* download rate in kilobytes per second */ 
float kbPerSec = bytesPerSec/(1024); 
System.out.println(kbPerSec + " KBps "); 

/* download rate in megabytes per second */ 
float mbPerSec = kbPerSec/(1024); 
System.out.println(mbPerSec + " MBps "); 
} 
+0

동일한 기본 개념이지만 샘플을 가져와야합니다 결과는 평균입니다 ... – MadProgrammer

+5

한 번에 1024 바이트를 다운로드하는이 루프가 있습니다. 동일한 루프에서 일부 통계 (및 해당 표시)를 업데이트 할 수 있습니다. 어쩌면 매 반복마다가 아니라 매 순간마다 그렇습니다. 다운로드가 완전히 중단되지 않으면 정기적 업데이트가 제공됩니다. 응답하지 않으면 통계를 폴링하는 두 번째 스레드가 필요합니다. – Thilo

+0

@MadProgrammer는 "샘플을 복용해야 할 필요가 있습니다. 정기적 인 기지"라고 말하면 좀 더 자세히 설명 할 수 있습니까? 나는 아직도 당신의 제안으로 분명하지 않다. –

답변

1

틸로

"당신은 한 번에 1024 바이트를 다운로드이 루프가 있습니다. 당신은 같은 루프 업데이트에 수 통계 (및 디스플레이). 어쩌면 매일 반복하지만, 모든 몇에서 . 다운로드가 완전히 중단되지 않으면 정기적 인 업데이트가 제공되지만 통계가 폴링하는 두 번째 스레드가 필요합니다. "

관련 문제