soominkim Study
article thumbnail
Published 2023. 3. 24. 09:00
[Java] BufferedReader / Bufferedwriter Java
728x90

 

Java에서 입력을 받을 때 Scanner 클래스를 통해 입력을 받았습니다. Scanner는 BufferedReader가 사용하기 불편하여 등장했으나 Scanner의 경우 내부적으로 정규 표현식이 많이 적용되어있어 타임어택 관련 알고리즘에 관하여 성능이 희생당하는 부분이 있습니다.

 

BufferedReader / Bufferedwriter는 이름처럼 버퍼를 이용해서 읽고 쓰는 함수입니다. 

BufferedReader개행문자만 경계로 인식하고 입력받은 데이터는 String으로 고정됩니다. 

기본 사용법은 다음과 같습니다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());

위에서 언급한 것처럼 반환값이 String으로 고정되어 있기 때문에 다른 타입을 받으려면 반드시 형변환을 해야합니다. 그리고 예외처리를 반드시 필요로 하는데 사용자의 편의에 맞게 try/catch문 혹은 throw IOException을 통해 할 수 있습니다. 

 

BufferedReader를 통해 읽어온 데이터는 개행문자 단위로만 나누어지기 때문에 이를 공백 단위로 데이터를 가공하려면 따로 작업을 해야합니다. 이 때 사용하는 것은 StringTokenizer, String.split() 함수를 사용할 수 있습니다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());

String arr[] = s.split(" ");

StringTokenizer nextToken() 함수를 쓰면 readLine()을 통해 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있습니다. 반면 String.split() 함수를 사용하면 배열에 공백 단위로 끊어 데이터를 저장하여 사용할 수 있습니다.

Modifier and Type Method and Description
void close() : 입력 스트림을 닫고 사용하던 자원을 해제합니다.
void mark(int, readAheadLimit) : 스트림의 현재 위치를 마킹합니다.
int read() : 한 글자만 읽어 정수형으로 반환합니다.
String readLine() : 한 줄을 읽습니다.
boolean ready() : 입력 스트림이 사용할 준비가 되었는지 확인합니다. 

 

Bufferedwriter의 기본 사용법은 다음과 같습니다.

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
String str = "abcdef"; 
bw.write(str);
bw.newLine();
bw.flush();
bw.close();
  • String str : 출력할 문자열을 입력합니다.
  • bw.write() : 문자열을 출력합니다.
  • bw.newLine() : 줄을 개행합니다.
  • bw.flush() : 남아있는 데이터를 모두 출력합니다.
  • bw.close() : 출력스트림을 닫습니다.

Bufferedwriter는 System.out.println() 처럼 출력과 개행을 동시에 해주는 것이 아니기 때문에 개행을 위해서는 따로 newLine()을 사용해야 합니다. 그리고 Bufferedwriter의 경우 버퍼를 잡아 놓았기 때문에 사용한 후  반드시 flush() / close()를 해야합니다. 

Modifier and Type Method and Description
void close() : 출력 스트림을 닫습니다.
void flush() : 스트림을 비웁니다.
void newLine() : 개행합니다.
void write(char[] buf, int offset, int length) : 버퍼 offset 위치부터 length 크기 만큼 출력합니다.
void write(int c) : 한 글자를 출력합니다
void write(String s,  int offset, int length) : 문자열에서 offset에서부터 일정 길이만큼 출력합니다.

 

728x90

'Java' 카테고리의 다른 글

[Java] AtomicLong  (0) 2023.01.27
[Java] Record Class  (0) 2023.01.27
[Java] 상속(Inheritance)  (0) 2023.01.24
[Java] Arrays.sort  (0) 2023.01.12
[Java] indexOf/lastIndexOF  (0) 2023.01.12
profile

soominkim Study

@soominkim

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그