BufferedReader / BufferWriter

버퍼를 이용해서 읽고 쓰는 함수.

버퍼를 사용하지 않는 입력 : 키보드의 입력이 크를 누르는 즉시 바로 전달됨.

버퍼를 사용하는 입력 : 키보드의 입력이 있을 때마다 한 문자씩 버퍼로 전송함. 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼 내용을 한번에 전송함.

하드디스크는 속도가 엄청 느리다. 하드디스크 뿐만 아니라 키보드나 모니터 같은 외부장치와의 데이터 입출력은 시간이 오래 걸린다. 버퍼를 사용해서 데이터를 한데 묶어 이동시키는 것이 훨씬 효율적이고 빠르다.

버퍼 입출력

  • 버퍼 - 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역 - 입출력 속도 향상을 위해 버퍼 사용

  • 버퍼 플러시(buffer flush) : 버퍼에 남아 있는 데이터를 출력(버퍼를 비우는 동작)

  • 버퍼를 이용한 입력 : BufferedReader

  • 버퍼를 이용한 출력 : BufferedWriter

BufferedReader, BufferedWriter 사용방법

  1. import java.io.*;

  2. throws IOException 추가 : 입출력 예외처리 println(), printf(), printf() : 메서드 내에 자체적으로 출력 시 예외처리가 정의되어 있다. 자바에서는 입력과 출력으로부터 일어날 수 있는 예외처리에 대해 까다로운 문법을 적용한다. 프로그램이 실행될 때 언제 어떤 문제가 발생할 지 모르는 일이기 때문에 프로그램을 만들 때는 예외로 발생하는 상황에 대처해야 하는데, 자바에서 입력과 출력 시 발생할 수 있는 예외에 대해 까다롭게 규정하고 있다. input과 output은 실행단계 이전에 반드시 이를 해야하므로 throws IOException을 추가하여 예외처리를 꼭 해주어야 한다. 입력과 출력을 . 다루는 메서드에 대한 예외처리가 없다면 컴파일 에러가 발생하게 된다!

BufferedReader의 readLine( )을 사용하면 데이터를 라인 단위로 읽을 수 있다. readLine 함수의 리턴 값은 String으로 고정되기 때문에 String이 아닌 다른 타입으로 입력 받으려면 형변환 꼭 해줘야한다.

import java.util.*;
import java.io.*;
public class StackArray throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();//push 17
    String[] line = str.split(" ");
    String cmd = line[0];
    int n = Integer.parseInt(line[1]);
}

Last updated