Scanner와 마찬가지로 사용자에게 입출력을 받을 때에 사용하는 클래스이며 대용량 데이터를 처리해야할 때에 사용한다.
설명
- BufferedReader / BufferedWriter 란 버퍼를 이용하는 대표적인 I/O (Input / Output) 클래스이다
- BufferedReader : Scanner와 유사함
- BufferedWriter : System.out.println(); 과 유사함
- 입력된 데이터를 바로 전달하지 않고 버퍼에 저장해두었다가 전달하는 방법
- 버퍼를 거쳐서 간접적으로 출력장치로 전달되어서 시스템의 데이터처리 효율성을 높여주며 InputStreamReader / OutputStreamWriter 를 같이 사용하여 버퍼링을 하게되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적인 입출력이 가능하다.
- BufferedReader 의 readLine()를 사용하면 데이터를 줄 단위로 읽을 수 있다
- BufferedWriter 의 newLine() 은 줄바꿈 메소드이다.
- Enter 를 기준으로 입력값을 인식한다.
Buffer 작동법
BufferedReader 사용 형태
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in
String str = bf.readLine();
int i = Integer.parseInt(bf.readLine());
String arr[] = str.split(" ");
StringTokenizer st = new StringTokenizer(br.readLine()," ");
}
객체 생성 후, String과 int 형태의 데이터를 입력받는 과정이다.
- BufferedReader를 선언하여 객체 생성을 한다.
- Enter를 기준으로 라인 단위로 입력을 받는다.
- readLine() 은 스트림으로부터 한 줄을 읽어 문자열을 리턴해주는 메소드이다.
- readLine() 을 사용할 시에 리턴값이 String 으로 고정되므로 다른 타입으로 입력을 받기 위해서는 형변환을 해주어야 한다.
- readLine() 사용 시 반드시 예외처리를 해주어야 한다.
- try & catch 사용하여 예외처리
- throws IOException 사용하여 예외처리 (주로 이 방식으로 사용한다.)
- 정수형으로 입력받아야 한다면, 형변환을 해주어야 한다.
- Space를 기준으로 입력받아야 할 때에 split 혹은 StringTokenizer 클래스를 이용해서 사용한다.
[StringTokenizer에 대한 자세한 설명은 추후에 추가할 예정이다.]
BufferedWriter 사용 형태
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));
String str = "Hello"
int T = Integer.parseInt(br.readLine());
bw.write(str);
bw.write(T+"\n");
bw.flush();
bw.close();
}
객체 생성 후, String과 int 형태의 데이터를 출력하는 과정이다.
- BufferedWriter 를 선언하여 객체 생성을 한다.
- 문자가 담긴 str과 정수가 담긴 T 를 선언한다.
- BufferedReader와 마찬가지로 readLine()을 사용하기 위해 int형은 형변환을 해준다
- 문자열은 그대로 출력하면 되지만, 숫자를 그대로 출력하면 아래와 같이 표현되기 때문에 +\n 을 추가하여 문자열 형태로 바꿔주어야 한다.
- bw.write(T) 로 출력했을 때의 결과물
- bw.write(T) 로 출력했을 때의 결과물
- 버퍼의 경우 반드시 버퍼를 끝내는 마무리 작업을 거쳐야 하므로 bw.flush() 와 bw.close()를 해주어야 한다.
- bw.flush() 는 남아있는 데이터를 모두 출력시키는 메소드이다.
- bw.close() 는 스트림을 닫는 메소드이다.
'기초이론 > JAVA' 카테고리의 다른 글
InputStreamReader 와 OutputStreamReader (0) | 2021.07.18 |
---|---|
Scanner (0) | 2021.07.18 |