-
[Java] BufferedReader, BufferedWriter 사용법Java 2022. 5. 20. 13:46반응형

Scanner나 System.out.println()을 사용해서 입출력을 만들게 되면 메모리에 상당한 부담이 가해지게 된다. 이를 방지하기 위해
버퍼를 사용해 입출력 효율을 올릴 수 있다. 데이터 처리량이 많을 때 유용한 기능이다.
BufferedReader는 Scanner의 기능을 한다. Scanner의 경우 공백도 사용가능 하지만, BufferedReader를 사용할 때에는
엔터만 구분자로 인식하기 때문에 추가적으로 가공을 해줘야 한다. 또한 BufferedReader에서 받아오는 데이터는 모두 String 객체이기 때문에
형변환을 반드시 해줘야 한다.
BufferedWriter는 System.out.println 메소드와 일치한다. 다만 중간에 버퍼를 사용하기 때문에 더 빠르다.
BufferedReader 사용법
public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); String str = br.readLine(); int n = Integer.parseInt(br.readLine()); // readLined으로 받은 입력 데이터는 String }주의점: readLine()시 리턴값을 String으로 고정되기 때문에 String이 아닌 다른 타입으로 입력을 받으려면 형변환을 해주어야 한다.
두번째는 예외처리를 꼭 해주어야 한다. readLine을 할 때마다 try & catch를 활용하여 예외처리를 해줘도 되지만, 대게 IOException을 통하여 작업한다.
Read한 데이터 가공
StringTokenizer st = new StringTokenizer(s); int a = Integer.ParseInt(st.nextToken)); // 첫번째 호출 int b = Integer.ParseInt(st.nextToken)); // 두번째 호출 String array[] = s.split(" "); //공백마다 데이터를 끊어서 배열에 넣는다.Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해주어야 한다. 첫번째 방법으로는
StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.
두번째 방법은 String.split()함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용한다.
BufferedWriter 사용법
일반적으로 출력을 할 때 System.out.println(""); 방식을 사용하곤 한다. 적은양의 출력일 경우 성능 차이가 미미하겠지만
많은 양의 출력에서는 입력과 마찬가지로 Buffer를 활용하는 것이 좋다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String = "abcdef"; // 출력할 문자열 bw.write(s); // 출력 bw.newLine(); // 줄바꿈 bw.flush(); // 남아있는 데이터를 모두 출력시킴 bw.close(); // 스트림을 닫음BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 반드시 flush() / close()를 호출해 두어 뒤처리를 해 주어야 한다.
그리고 bw.write에는 System.out.println();과 같이 자동개행기능이 없기 때문에 개행을 해 주어야 할 경우에는 \n 을 통해
따로 처리해주어야 한다.
반응형'Java' 카테고리의 다른 글
[Java] Exception 발생 시키기 (0) 2022.05.20 [Java] throws (0) 2022.05.20 [Java] Exception - 예외처리 (0) 2022.05.20 [Java] API - String 클래스 (0) 2022.05.19 [Java] 헷갈리는 문자열 함수 정리 (substring, split, charAt, indexOf, lastIndexOf) (0) 2022.05.18