2013-04-15 1 views
4

이미 OutputStreamWriter에서 보낸 데이터의 크기를 표시하려고 시도했지만 write 메서드는 비동기식과 비슷합니다. 즉 파일이 60M이고 업로드 속도가 200K/s이면 출력에는 " 전송 된 데이터 : 61210K "(또는 초당 작은 숫자) 대신에 (큰 숫자)HttpURLConnection에서 보낸 데이터의 크기를 모니터링하는 방법은 무엇입니까?

내가 무엇을 놓쳤습니까?

코드 조각 :

Writer writer = new OutputStreamWriter(out, POST_ENCODING); 
char[] buf = new char[1024]; 
int read = 0; 
long bytes = 0; 
while ((read = reader.read(buf)) >= 0) { 
    bytes += read; 
    if (System.currentTimeMillis() - lastMsgTimeStamp > 1000) { 
     lastMsgTimeStamp = System.currentTimeMillis(); 
     System.out.println("Data sent: " + (bytes/1024) + " K"); 
    } 
    writer.write(buf, 0, read); 
} 
writer.flush(); 
+0

'OutputStreamWriter'가 래핑하는'out'이란 무엇입니까? 밑에있는'StreamEncoder'는 그것에 쓸 것입니다. –

+0

java.net.URLConnection.getOutputStream()에 의해 반환되는 것은 단지 OutputStream입니다. – NSF

답변

0

는 많은 문자, 바이트하지 수를 전송/읽는 방법을 추적하고, readerInputStreamReader입니다 가정. 읽기/쓰기 사이에 실제로 텍스트 작업을하지 않을 경우 InputStream/OutputStream 표준을 사용하여 바이트 수를 모니터링 할 수 있습니다.

또한 lastMsgTimeStamp에 선언이 없습니다. 예제 외부에 System.currentTimeMillis()으로 설정되어 있습니까?

어느 경우 든 OutputSteamWriter과 나머지 java.io.* 패키지가 차단됩니다. 따라서 write이 호출되면 스레드는 완료 될 때까지 중지합니다. 그러나 StreamEncoderOutputStreamWriter이고, OutputStreamURLConnection의 결과로 구현되는 버퍼링이 있습니다. 그렇게 많은 양의 데이터를 버퍼링하지 않으므로 문제가 발생할 가능성이 큽니다.

관련 문제