기존에 벤치비 속도측정 앱처럼
서버를 두고 서버에서 파일을 핸드폰으로 전송하여 다운로드 속도를 측정하는 방법 말구요.
만약 영화를 다운로드 받는 다면
영화 다운로드 속도를 앱내에서 측정할 수 있는 방법(API라든가)이 없는지요?
그럼 고수님들의 답변 부탁 드립니다.
직접 계산하시면 됩니다.
전역으로 변수 long 변수 2개를 만듭니다. 현재 다운로드 받은 바이트 수, 1초 전까지 다운로드 받은 바이트 수
다운로드 받는 부분에서는 현재 다운로드 받은 바이트 수만 변경해 줍니다.
별도의 스레드나 핸들러 등을 통해서 1초마다 현재 다운로드 받은 바이트 수를 읽어서 1초 전까지 다운로드 받은 바이트 수 를 뺍니다.
그러면 1초동안 받은 바이트 수가 나오죠. 이게 다운로드 속도입니다.
예제 코드는
static long downLength;
static boolean isDownloading;
public static void fileDown() {
String url = "파일 다운 url";
try {
downLength = 0;
isDownloading = true;
InputStream is = new HttpConnector().getResponseContent(url); //이건 제가 만든 http 통신 모듈입니다.
FileOutputStream fos = new FileOutputStream("다운로드파일명");
int len = -1;
byte buffer[] = new byte[8192]; //버퍼 8k
new DownloadSpeedThread().start();
while((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
downLength += len;
}
fos.close();
is.close();
}
catch(Exception e){ e.printStackTrace(); }
isDownloading = false;
}
private static class DownloadSpeedThread extends Thread {
long prevLength;
public void run() {
prevLength = 0;
while(isDownloading) {
try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
long down = downLength - prevLength;
System.out.println("===========================");
System.out.println(down+"byte");
System.out.println(down/1024+"KB");
System.out.println(down/1024/1024+"MB");
System.out.println("===========================");
prevLength = downLength;
}
}
}




더미데이터를 받는 방법외에도 속도 측정이 가능한가요??
다운로드 속도라는건 클라이언트 <- -> 서버 간 파일 전송의 속도이므로 실제로 데이터를 주고 받지 않음에야 알기 어렵겠죠..
물론, ping 같은 유틸에서 볼 수 있듯이 TCP/IP 프로토콜의 echo request, echo reply를 이용하여 packet loss, resposne time 등 서버와의 연결 상태를 체크할 수 는 있겠습니다. 이는 단순한 지표일 뿐이죠.