언어 공부 내용 정리/Java

자바 BufferedReader BufferedWriter : 빠른 입출력 (ing)

wosrn 2023. 6. 28. 15:05

BufferedReader

  • 자바에서 처음 배우는 입력은 Scanner를 통한 입력인데, scanner은 spaca와 enter를 모두 경계로 인식하기 때문에 입력받은 데이터를 가공하기엔 편리하지만, 작업 속도나 메모리 면에서 비효율적이다 (실제로 경험상 백준을 풀 때 많은 양의 데이터를 입력 받는게 아님에도 bufferedreader를 사용한 코드와 scanner를 사용한 코드의 런타임이 꽤 차이난다)
  • BufferedReader는 버퍼를 사용해서 읽기를 한다 : 버퍼를 사용하지 않는 입력은 키보드의 키를 누르는 즉시 프로그램에 입력값이 전달되는 반면, 버퍼를 사용하는 입력은 키보드에 입력이 들어오면 버퍼에 전송이 되고 버퍼가 가득 차거나 개행문자가 나타났을 때 한번에 입력값을 프로그램에 전달한다 / 키보드 입력이 있을 때마다 바로 이동시키는 것 보다 중간에 버퍼를 두어 한번에 묶어 보내는게 속도가 더 빠르고 효율적인 방법

BufferedReader 사용법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine(); //입력은 readLine() 메소드를 사용, String이 기본타입
int i = Integer.parseInt(br.readLine()); //String 외 다른 타입으로 이용하고자 할때 - 형변환 필요
 //입력값을 공백단위로 구분
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
  • java.io 패키지를 imort 해야 사용 가능
  • BufferedReader / BufferedWriter 사용시에는 반드시 예외처리 해야함 -> 메소드 옆에 throws IOException 달거나 try-catch문을 예외처리 코드 작성
  • 앞서 말했듯 BufferedReader는 enter만을 경계로 인식하기 때문에, 공백 단위로 데이터를 가공하려면 따로 처리를 해줘야한다

1) StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 호출 

2) String.split()함수를 사용하여 배열에 데이터를 공백단위로 끊어 저장해서 사용 

 

BufferedReader 클래스의 주요 메소드

close() 입력 스트림을 닫고 사용하던 자원을 해체
mark(int,readAheadLimit) 스트림의 현재 위치 마킹
read() 한글자만 읽어 int형으로 리턴
readLine() 한 줄을 읽어 문자열로 리턴
ready() 입력 스트림이 사용할 준비가 되었는지 확인(1이 완료)

'언어 공부 내용 정리 > Java' 카테고리의 다른 글

객지프 기말대비 정리 (3-4장)  (0) 2023.07.15
객지프 중간대비 복습자료  (0) 2023.07.07
자바 예외처리  (0) 2023.06.17
자바 컴파일과 클래스, API  (0) 2023.06.17
자바 객체지향(2) (ing)  (1) 2023.06.16