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()이라는 메서드를 활용하는데 이때 반드시 주의할 점!!
- readLine( ) 메서드 사용 시 리턴 값이 String으로 고정되기 때문에 String이 아닌 다른 타입으로 입력을 받으려면 반드시 형 변환을 꼭 해주어야 한다.
- 예외처리를 꼭 해주어야 한다. 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 단위)로 나뉜다.
만약 이를 공백 단위로 데이터를 가공하고자 할 때 StringTokenizer 나 String.split( ) 함수이다.
StringTokenizer의 nextToken( ) 함수를 쓰면 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( )는 한번 출력 후 다른 것도 출력한다.
'Language > Java' 카테고리의 다른 글
[Java / 자료구조] Deque 개념 및 정리 (1) | 2022.10.10 |
---|---|
[Java] 배열 (Array) 개념 및 정리 (1) | 2022.10.01 |
[Java] 열거형 (enum) 정리 (1) | 2022.09.29 |
[Java] 재귀 함수 (Recursion Function) 정리 (1) | 2022.09.29 |
[Java / 자료구조] 이진 탐색 트리 (Binary Search Tree) 정리 (8) | 2022.09.28 |