[JAVA] BufferedReader와 BufferedWriter

gyeol·2024년 3월 27일
0

자바

목록 보기
9/12
post-thumbnail

BufferedReader / BufferedWriter

BufferedReaderBufferedWriter는 버퍼를 사용해 읽기와 쓰기를 하는 함수이다.

하드디스크는 속도가 느리다. 외부장치와 데이터 입출력도 생각보다 시간이 오래 걸리기 때문에 키보드의 입력이 있을때 마다 바로 이동시키는 것보다 중간에 버퍼를 두어 한번에 보내는 것이 더 효율적이고 빠른 방법이다.

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

BufferedReader

Scanner와 달리 BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터가 String으로 고정된다. 그렇기 때문에 따로 데이터를 가공해야 하는 경우도 많지만 Scanner 보다 속도가 빠르다는 장점이 있다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
String str = br.readLine();
int i = Integer.parseInt(br.readLine());

이와 같은 형식으로 사용하면 된다.
System.in은 사용자로부터 입력을 받기 위한 입력 스트림이다. Scanner 클래스 뿐만 아니라 다른 입력 클래스들도 System.in을 통해 사용자 입력을 받아야 한다.
입력은 readLine()을 사용한다. String으로 타입이 고정되어 있기에 다른 타입으로 입력받고자 한다면 형변환이 반드시 필요하다. 그리고 예외처리도 필수이다.

BufferedReader를 통해 읽어온 데이터는 개행문자 단위로 나뉘어진다. 이를 공백 단위로 데이터를 가공하고자 한다면 따로 작업이 필요하다. 이때 사용하는 것이 StringTokenizerString.split()이다.

// StringTokenizer 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());

// String.split() 함수
String arr[] = s.split(" ");

nextToken()을 사용하면 readLine()을 통해 입력 받은 값을 공백단위로 구분해 순서대로 호출 가능하다.
String.split()을 사용하면 배열에 공백단위로 끊어 데이터를 저장해 사용할 수 있다.

BufferedReader 클래스의 메인 함수

BufferedWriter

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

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
String str = "abcdef"; // 출력할 문자열
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.flush(); // 남아있는 데이터 모두 출력
bw.close();

BufferedWriterSystem.out.println()처럼 출력과 개행을 동시에 해주지 않기 때문에, 개행을 위해선 따로 newLine() 혹은 bw.write(\n) 을 사용해야 한다.
그리고 BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 사용 후에는 flush(), close()를 해주어야한다. close()를 하게되면, 출력 스트림을 아예 닫기 때문에 한번 출력후, 다른 것도 출력하고자 한다면 flush()를 사용하면 된다.

BufferedWriter 클래스 메인 함수

Scanner와 BufferedReader의 차이점

Scanner는 사용자가 입력한 텍스트를 토큰 단위로 잘라 특정 형태로 반환하는 것이고 BufferedReader는 사용자가 입력한 데이터 자체를 읽어들인다.

  • Scanner는 BufferedReader보다 타입의 구애를 받지 않는다.
  • BufferedReader는 Scanner보다 더 효율적인 메모리 용량을 가진다.
  • BufferedReader는 Scanner보다 안전하다.
  • BufferedReader가 Scanner보다 실행 속도가 빠르다.

참고 : https://rlakuku-program.tistory.com/33

profile
코딩 공부 기록중 '◡'

0개의 댓글