[Java] BufferedReader, BufferedWriter

sunny·2023년 3월 24일
0

BufferedReader, BufferedWriter는 버퍼를 사용하여 읽기와 쓰기를 수행하는 함수

왜 사용하냐❗️

  • 버퍼를 사용하지 않는 입력 👉 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달
  • 버퍼를 사용하는 입력 👉 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송한다. 이때, 버퍼가 가득 차거나 혹은 개행 문자가 나타나면 버퍼의 내용을 한 번에 프로그램에 전달
  • 속도⬆️

BufferedReader 사용법

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

public static void main(String[] args) throws  IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // BufferedReader를 통해 읽어온 데이터는 개행문자 단위로 나누어진다.
        String s = br.readLine();
        int i = Integer.parseInt(br.readLine());

        // 공백 단위로 입력받기!!
        // StringTokenizer
        StringTokenizer st = new StringTokenizer(br.readLine());
        int j = Integer.parseInt(st.nextToken());
        // String.split()
        String arr[] = s.split(" ");

    }

입력은 readLine() 이라는 메소드를 사용한다. 이때 return 값이 String으로 고정되어 있다!

또한, 예외처리도 반드시 필요하다!

public static void main(String[] args) throws  IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[][] arr = new int[N][2];
        
        StringTokenizer st;
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }
}
3
1 2
3 4
6 7

BufferedWriter 사용법

일반적으로, 출력을 할 때 System.out.println() 을 사용한다. 이는 적은 양의 출력에서는 편리하지만 많은 양의 출력에서는 버퍼를 사용하는 것이 좋다!

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

public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        bw.write("Hello World!");
        bw.newLine();
        bw.flush();
        bw.close();
}
  • write(char[] buf, int offset, int length) : 버퍼 offset 위치부터 length 크기 만큼 write
  • newLine() : 개행 문자 역할
  • flush() : 스트림를 비움
  • close() : 스트림을 닫음. 닫기 전 flush()

0개의 댓글