코딩테스트/백준

[Java] BufferedReader & BufferedWriter

까루카라 2024. 1. 3. 00:19

BufferedReader & BufferedWriter

BufferedReader : Scanner 와 유사

BufferedWriter : System.out.println();과 유사

 

기존에 사용하던 Scanner, System.out.println();보다 속도 측면에서 훨씬 빠르기 때문에 많은 데이터를 처리할 때 유리하다. 

: 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높임


BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();

 

readLine(); 

  1. readLine() 사용 시 리턴값이 String으로 고정되기 때문에 다른 타입으로 입력을 받으려면 형변환을 꼭 해주어야 한다. 
  2. 예외 처리를 꼭 해주어야 한다. (안하면 에러)
  3. Line 단위로만 나눠지기 때문에 공백 단위로 데이터를 가공하는 작업이 필요하다. 

 

형변환

// 입력 받은 데이터는 String으로 고정되기 때문에 int로 타입캐스팅 해주어야 함.
int n = Integer.parseInt(br.readLine());

 

에러처리 방법

(1) 클래스를 import 해준다. 

import java.io.IOException;

(2) main 클래스 옆에 throws IOException를 작성한다.

public static void main(String[] args) throws IOException {}

 

공백 단위 가공

import java.util.StringTokenizer;

StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음

 


BufferedWriter

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));   
//할당된 버퍼에 값 넣어주기

String s = "abcdefg";   //출력할 문자열
bw.write(s+"\n");   //버퍼에 있는 값 전부 출력
bw.flush();   //남아있는 데이터를 모두 출력시킴
bw.close();   //스트림을 닫음

 

버퍼를 잡아 놓았기 때문에 실행 후 flush() / close()를 반드시 호출해 뒤처리를 해주어야 한다. 

bw.write()는 자동 개행 기능이 없기 때문에 개행을 하려면 \n을 따로 처리해주어야 한다.