Language/Java

[Java] BufferedReader와 BufferedWriter 정리

pongic 2022. 10. 1. 16:44
반응형

BufferedReader와 BufferedWriter란?

BufferedReader와 BufferedWriter은 이름처럼 버퍼를 이용해서 읽고 쓰는 함수이다. 이 함수는 버퍼를 이용하기 때문에 입출력의 효율이 좋아진다. BufferedReader는 Scanner와 유사하고 BufferedWriter는 System.out.println( )과 유사하다.

두 기존에 쓰던 Scanner와 System.out.println( ) 보다 속도 측면에서 훨씬 빠르다.

 

하지만 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력받은 데이터를 가공하는 작업이 필요하다.

// 사용하기 위해 import 선언

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

 

BufferedReader 사용법

// BufferedReader 사용법

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // 선언
String s = bf.readLine();  // String
int i = Integer.parseInt(bf.readLine()); // int

 

※ 입력은 readLine()이라는 메서드를 활용하는데 이때 반드시 주의할 점!!

  1. readLine( ) 메서드 사용 시 리턴 값이 String으로 고정되기 때문에 String이 아닌 다른 타입으로 입력을 받으려면 반드시 형 변환을 꼭 해주어야 한다.
  2. 예외처리를 꼭 해주어야 한다. try & catch를 활용해도 되지만 주로 throws IOException을 사용한다.

 

throw 사용

// throw 이용시 1. 클래스를 import 2. main 클래스 옆에 throws IOException를 작성한다

import java.io.IOException;

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

    }
}

 

데이터 가공

// StringTokenizer 
import java.util.StringTokenizer;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()); // StringTokenizer인자값에 입력 문자열 넣음
int N = Integer.parseInt(st.nextToken());  // 첫번째 호출
int M = Integer.parseInt(st.nextToken());  // 두번째 호출

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

BufferedReader를 통해 읽어온 데이터는 개행 문자 (Line 단위)로 나뉜다.

만약 이를 공백 단위로 데이터를 가공하고자 할 때 StringTokenizerString.split( ) 함수이다.

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

 

BufferedWriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
String str = "abcdef"; // 출력할 문자열
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();

BufferedWriter는 System.out.println(" ")처럼 출력과 개행을 동시에 할 수 없다. 그래서 newLine( ); 혹은 bw.write("\n"); 을 사용해야 한다. BufferedWriter의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush( ) / close( )를 해주어야 한다.

close( )는 출력 스트림을 아예 닫는 것이고 flush( )는 한번 출력 후 다른 것도 출력한다.

반응형