[2022-1] 입출력 스트림(buffer 관련)

Jayde·2022년 4월 29일
0
post-thumbnail

러닝메이트를 진행하던 도중 팀원 모두 buffer 사용에 어려움이 있어 '자바 프로그래밍 바이블'을 통해 입출력 스트림을 알아보는 시간을 가졌다.

◾BufferedReader
Reader의 하위 클래스인 BufferedReader 클래스는 문자 입력 스트림의 효율적인 버퍼링을 기능하게 한다. 이때 버퍼링이란 입출력 수행을 향상시킨 기술이다. 수많은 '논리적' 데이터 덩어리들이 하나의 큰 물리적 입력 연산으로서 파일로부터 읽혀서 버퍼로 입력된다. 버퍼가 비워지면 입력 장치에서 다음의 실제 물리적 입력 연산이 수행되어 다음 '논리적' 데이터 덩어리 그룹에서 데이터를 읽는다. 버퍼에 데이터 덩어리를 저장하고 메모리 버퍼로부터 데이터를 읽어 내는 것 뿐이기 때문에 효율적이고 빠르다.
BufferedReader 클래스의 객체를 생성할 때 매개변수로 Reader 클래스의 자식 클래스를 지정하는데, 파일로 읽을 땐 FileReader, 한 줄 씩 읽을 땐 InputStreamReader 클래스를 이용하여 생성한다.

◾InputStreamReader
InputStreamReader 클래스는 문자 그대로 InputStream을 Reader로 바꿔주는 클래스다. System.in을 InputStreamReader의 매개변수로 지정하여 이를 BufferedReader 클래스와 연결시키면, 사용자가 아무리 많은 문자를 키보드로 입력하더라도 readline() 메소드를 이용해 처리할 수 있다.

◾입력
위의 내용을 조합하면 Buffer를 이용한 입력을 다음과 같이 할 수 있다. 이때 int의 입력은 Integer.parseInt()를 이용해 한 번 형변환을 시켜주어야 한다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readline();
int num = Integer.parseInt(br.readline());

◾BufferedWriter
BufferedWriter 클래스는 문자 기반 스트림의 효율적 버퍼링을 가능하게 한다. BufferedWriter 클래스의 객체를 생성할 때 매개변수로 Reader 클래스의 자식 클래스를 지정하는데, OutputStreamWriter 클래스를 이용하여 생성한다.

◾ OutputStreamWriter
OutputStreamWriter 클래스는 System.out을 매개변수로 지정하여 BufferedWriter 클래스와 연결시켜 write() 메소드를 이용해 처리할 수 있다.

◾출력
위의 내용을 조합하면 Buffer를 이용한 출력을 다음과 같이 할 수 있다. 이때 main에 throws IOException 처리를 해주어야 한다. 출력이 끝난 뒤에는 BufferedReader와 BufferedWriter를 close() 해주어야 한다. close()를 호출하면 flush()를 호출할 필요가 없다.

BufferedWriter bw = new BufferedWriter(new OutStreamWriter(System.out));
bw.write('출력할 내용');
bw.close;
br.close;

◾StreamTokenizer, StringTokenizer
StreamTokenizer, StringTokenizer 클래스는 문자 입력 스트림을 토큰 단위로 나눠서 관리할 수 있는 클래스이다. 이때 문자 스트림은 기본적으로 '\r', '\t', '\n', '\f'를 구분자로 토큰을 나눈다. nextToken() 메소드를 이용해 토큰을 변수에 할당할 수 있다. 할당할 때에는 형변환을 해주어야 한다.

StringTokenizer st = new StringTokenizer(br.readline());
int num = Integer.parseInt(st.nextToken);
profile
가장 높이 빛난 별 잡아보일게

0개의 댓글