2013년 8월 8일 목요일

[2주차 5일] Buffer의 사용

: 버퍼 클래스는 한번 읽을 때 많이(8k) 읽어서 메모리에 올려 놓고 사용하다 새로운 것이 또 필요하면 다시 많이씩 읽어와서 처리는 방식으로 큰용량을 처리할 때 속도와 연관되기 때문에 필수 적이다.

ex>
public static void main(String[] args) throws IOException {
testWithoutBuffer();
testWithBuffer();

}

private static void testWithoutBuffer() throws IOException {
long start = System.currentTimeMillis();
FileInputStream in = new FileInputStream("Android_DDMS.pdf");
int i;
while ( true ) {
i = in.read();
if ( i== -1)
break;
}
in.close();
long end = System.currentTimeMillis();

System.out.println("경과된 시간(초): " + ((end - start)));
}

private static void testWithBuffer() throws IOException {
long start = System.currentTimeMillis();
FileInputStream in = new FileInputStream("Android_DDMS.pdf");
BufferedInputStream in2 = new BufferedInputStream(in);
int i;
while ( true ) {
i = in2.read();
if ( i== -1)
break;
}
in2.close();
in.close();
long end = System.currentTimeMillis();

System.out.println("경과된 시간(초): " + ((end - start)));
}

이 소스를 돌려봤을 때 장비마다 차이가 발생 되겠지만 2Mbyte의 pdf파일로 실험해 본 결과Buffer클래스를 사용했을때 대략 30배 정도 빠르게 결과가 나왔다.

* 이런 차이를 보이는 이유는 기본적으로 하드가 데이터를 찾고 읽는 과정 중에서 찾는 시간이 읽어들이는 시간보다 월등하게 많이 들어가는데, 버퍼를 사용 하게되면 그렇지 않았을 때보다 데이터를 찾는 시간이 절약되기 때문이다.

댓글 없음:

댓글 쓰기