BufferedReader — 효율적인 문자 입력 버퍼링
BufferedReader — 효율적인 문자 입력 버퍼링
BufferedReader는 문자 입력 스트림에서 텍스트를 읽되 문자, 배열, 줄을 효율적으로 읽을 수 있도록 문자를 버퍼링하는 클래스예요. 버퍼 크기를 지정할 수도 있고 기본 크기를 사용할 수도 있는데, 기본 크기는 대부분의 용도에 충분히 큽니다. 일반적으로 Reader에 대한 각 읽기 요청은 기반 문자·바이트 스트림에 대한 읽기 요청을 일으키기 때문에, read() 연산이 비싼 FileReader나 InputStreamReader 같은 Reader를 BufferedReader로 감싸는 것이 좋아요.
본문
이 클래스는 java.io.Reader를 상속하며 Closeable, AutoCloseable, Readable을 구현하고, 직접 알려진 하위 클래스로 LineNumberReader가 있어요. 텍스트 입력에 DataInputStream을 쓰던 프로그램은 각 DataInputStream을 적절한 BufferedReader로 교체해 지역화할 수 있어요.
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
이렇게 하면 지정한 파일의 입력이 버퍼링됩니다. 버퍼링이 없다면 read()나 readLine() 호출마다 파일에서 바이트를 읽고 문자로 변환한 뒤 반환해야 해서 매우 비효율적일 수 있어요.
생성자
BufferedReader(Reader in)— 기본 크기의 입력 버퍼를 사용하는 버퍼링 문자 입력 스트림을 만들어요.BufferedReader(Reader in, int sz)— 지정한 크기의 입력 버퍼를 사용하는 버퍼링 문자 입력 스트림을 만들어요.sz <= 0이면IllegalArgumentException을 던져요.
메서드
int read()— 한 문자를 읽어065535(0x000xffff) 범위의 정수로 반환하고, 스트림 끝이면-1을 반환해요.IOException을 던질 수 있어요.int read(char[] cbuf, int off, int len)— 문자를 배열의 일부로 읽어요. 기반 스트림의read를 반복 호출해 가능한 한 많은 문자를 읽으려 해요.IndexOutOfBoundsException(off 음수, len 음수, len이cbuf.length - off보다 큼),IOException을 던질 수 있어요.String readLine()— 한 줄의 텍스트를 읽어요. 줄은 개행('\n'), 캐리지 리턴('\r'), 캐리지 리턴 바로 뒤 개행, 또는 EOF로 종료된 것으로 간주해요. 줄 종료 문자는 제외한 내용을 반환하고, 문자 없이 스트림 끝에 도달하면null을 반환해요.boolean ready()— 이 스트림이 읽을 준비가 됐는지 알려줘요. 버퍼가 비어 있지 않거나 기반 문자 스트림이 준비된 경우 준비된 것으로 봐요.boolean markSupported()— 이 스트림이mark()연산을 지원하는지 여부를 알려주며 항상true를 반환해요.void mark(int readAheadLimit)— 스트림의 현재 위치를 표시해요. 이후reset()호출이 이 지점으로 스트림을 되돌리려 시도해요.readAheadLimit < 0이면IllegalArgumentException을 던져요.void reset()— 스트림을 가장 최근의 마크로 재설정해요. 마크된 적이 없거나 마크가 무효화됐으면IOException을 던져요.void close()— 스트림을 닫고 관련 시스템 자원을 해제해요. 닫힌 후read(),ready(),mark(),reset(),skip()호출은IOException을 던져요.Stream<String> lines()— 이BufferedReader에서 읽은 줄들을 요소로 갖는Stream을 반환해요. 스트림은 지연(lazily) 채워지며, 읽기는 터미널 스트림 연산 동안에만 일어나요. 기반BufferedReader접근 중IOException이 발생하면UncheckedIOException으로 감싸져 던져져요. (Java 8부터)