2013-05-23 2 views
0

파일을 복사하는 동안 전송 속도 (MB/s)를 볼 수있는 방법이 있습니까? 이것은 네트워크 소켓이 아니라 hdd (예 : hdd)입니다. 파일 내용을 바이트 단위로 복사합니다. 파일을 복사하는 코드 : 플랫폼은 윈도우물리적 전송 속도 Java IO

while ((length = in.read(buffer)) > 0) { 
    out.write(buffer, 0, length); 
    totalBytesCopied += length; 
    int totalKilos = (int) totalBytesCopied/1024; 
    int totalMegas = totalKilos/1024; 
} 

이 작업을 수행 할 수있는 방법의 예입니다? 친절하시기 바랍니다

+0

파일을 복사하는 데 사용하는 코드는 무엇입니까? 간단한 루프에서 작업하는 경우 사소한 일입니다. 전송을 시작한 이후로받은 바이트 수를 측정하면됩니다. 채널/NIO를 사용하는 경우 조금 까다 롭지 만 한 번에 모두 전송하는 대신 청크로 전송을 시작하면 여전히 수행 할 수 있습니다. – berry120

+0

복사 코드를 코드로 감싸서 시간을 확인하십시오. 매초 전송 된 데이터를 비교합니다. –

+0

당신은'hdparm'을 찾고있는 것 같습니다. 플랫폼을 지정하지 않았 으면 Linux에서 작동합니다. – devnull

답변

4

종류의. 먼저 응용 프로그램 수준에서 수행 할 수 있습니다.

byte[] buffer = new byte[BUFFER_SIZE]; 
    int n = 0; 
    while (-1 != (n = input.read(buffer))) { 
     output.write(buffer, 0, n); 
    } 

그래서, 다음과 같은 수정 : 귀하의 코드를 복사 파일과 같아야합니다

byte[] buffer = new byte[BUFFER_SIZE]; 
    int n = 0; 
    long before = System.currentTimeMillis(); 
    while (-1 != (n = input.read(buffer))) { 
     output.write(buffer, 0, n); 
     long after = System.currentTimeMillis(); 
     double speed = n/(after - before) * 1000; // speed in byte per second 
     before = System.currentTimeMillis(); 
    } 

당신은 잘 할 수 있습니다. SpeedMeasurementOutputStream을 구현하여 출력 스트림을 래핑하고 유사한 로직을 write() 메소드로 수행하십시오. 그런 다음이 스트림을 사용하여 FileOutputStream을 랩핑하고 복사하는 동안 속도를 확보하십시오. 이 방법은 모든 스트림의 속도를 측정 할 수 있기 때문에 더 좋습니다.

+0

예제를 사용하는 경우 java.lang.ArithmeticException이 발생합니다./0으로 – user1794974

+0

@ user1794974 코드는 원칙 만 보여줍니다. 수식에서 경과 된 밀리 초와 같은 엣지 케이스를 처리하는 것은 * 귀하의 직무입니다. – Durandal