본문 바로가기

Java

[Java performance tips - 4] IO관련 - End

[출처 : Java Press 책 발췌]

① 통상적으로 Stream계의 클래스를 사용함

java.io패키지에서 문자데이터 입출력시에는 Reader/Writer 클래스를

바이트단위 데이터 입출력시에는 InputStream/OutputStream 을 이용합니다.

다만, 아스키캐릭터의 경우에는 1문자가 1바이트이므로

InputStream/OutputStream 클래스를 이용할 수 있습니다.

약 100K 정도의 영문자로 이루어져 있는 텍스트파일을 가지고 예를 들겠습니다.

예) Reader계 클래스을 이용한 파일 입출력 예

FileReader in = new FileReader("test.txt");

int buf;

while ( buf = in.read() != -1)

{

.......

}

in.close();

예) InputStream계 클래스를 이용한 파일 입출력 예

FileInputStream in = new FileInputStream("test.txt");

int buf;

while ( buf = in.read() != -1)

{

.......

}

in.close();

위의 2가지 예를 비교한 performance 비교표는 아래와 같습니다.

사용클래스

처리시간(ms)

FileReader

18000

FileInputStream

800

CPU : Pentium 300MHz/ Memory :128M / OS : Linux/ J2SE:1.3.1

InputStream계 클래스를 이용한 파일 입출력이 월등히 빠른 처리속도를 보임을 알 수 있습니다.

② Buffering을 이용

예) Buffering을 한 Reader계 클래스을 이용한 파일 입출력 예

FileReader in = new FileReader("test.txt");

BufferedReader bin = new BufferedReader(in);

int buf;

while ( buf = bin.read() != -1)

{

.......

}

bin.close();

예) Buffering을 한 InputStream계 클래스를 이용한 파일 입출력 예

FileInputStream in = new FileInputStream("test.txt");

BufferedInputStream bin = new BufferedInputStream(in);

int buf;

while ( buf = bin.read() != -1)

{

.......

}

bin.close();

위의 2가지 예를 비교한 performance 비교표는 아래와 같습니다.

사용클래스

처리시간(ms)

BufferedReader

150

BufferedInutStream

80

CPU : Pentium 300MHz/ Memory :128M / OS : Linux/ J2SE:1.3.1