버퍼링(Buffering)
기능을 이용하자.
Network
프로그램이나 웹프로그래밍에서 통신을 위해 소켓으로 들어 오는 데이터나 웹요청을 처리하기 위해 끊임없이 소켓을 사용 하게
됩니다. 우리가 자바에서 네트웍 프로그래밍을 하면 주로
InputStream을 이용해 들어 오는 데이터를 받고 OutputStream을 통해
상대방 쪽으로 데이터를 보낼 수가 있는데 이때 버퍼를 이용하는 방법은 그렇지 않은 방법은 10배 이상
빠른 성능을 보일 수 있는데 …
아래의
예제를 볼까여~~~
우선
버퍼를 이용하지 않고 하나의 파일에서 다른 파일로 복사 하는 것을 간단히 구현해 보겠습니다.
import java.io.*;
class FileCharStreamTest {
public
static void main(String[] args) throws Exception{
FileInputStream in = new FileReader(args[0]);
Writer out = new FileWriter(args[1]);
int count=0;
//아래는 첫번째 매개변수가 가리키는 파일을 끝까지 한글자씩
읽었습니다.
for(int ch; (ch = in.read()) != -1; count++)
{
out.write(ch);
}
System.out.println(count+"문자 복사됨...");
out.close();
}
}
이번에는
같은 결과를 내는 버퍼링 기능을 이용한 예젭니다.~
//아래는 FileCharStreamTest.java
파일의 기능을 byte 배열을 이용하여
//즉 버퍼링 기능을 이용하여 읽을때 1024
바이트 만큼 읽어 들입니다.
//그런 다음 읽은 것을 메인 함수 실행 시 입력 받은 두번째 매개변수에
//해당 하는 파일에 쓰게 됩니다. 당연히 한
글자씩 읽어 쓰는 것보다
//빠른 성능을 보일 겁니다.
import java.io.*;
class FileCharStreamTest1 {
public
static void main(String[] args) throws Exception{
FileInputStream in = new
FileInputStream(args[0]);
Writer out = new FileWriter(args[1]);
int count=0;
byte buf[] = new byte[1024];
int n;
while((n = in.read(buf)) != -1) {
for(int
i=0; i < n; i++) {
out.write(buf[i]);
count++;
}
}
System.out.println(count+"문자 복사됨...");
out.close();
}
}
위
예문의 예제는 얼마 되지 않은 한번만 수행되는 예제 지만 환경을 네트웍으로 생각하고 계속 데이터를 읽어서 무언가를 처리 한다고 볼때 이러한
사소한 코딩 하나도 전체 시스템에 많은 영향을 줄 수 있습니다,,, 또 웹환경인 서블릿에서
웹브라우저에 많은 양의 데이터를 출력한다고 하면 흔히 아래 처럼 하게 될 겁니다.
PrintWriter myout = response.getWriter();
myout.println(“열나긴 문자열”)
그러나
이 방법 보다는 아래의 방법이 훨씬 효율적일 겁니다.
보이시죠 Buffer~~~ 라는 글자가…
myout = new PrintWriter(new
BufferedWriter(response.getWriter()));
myout.println(“열나긴문자열”);
버퍼링을
이용하면 그때그때 보내지 않고 깡통에 쌓아 두었다가 한순간에 부어 버리는거죠^^; 이걸 Flush 한다라고 하죠, 물론
JSP는 기본적으로 출력을 버퍼링 하는 것은 아마 아실겁니다. JSP에서
이용되는 JspWriter는 response객체를 좀더 유용하게 하기
위해서 PrintWriter에 버퍼링 기능을 추가한 것입니다.
댓글 없음:
댓글 쓰기