BufferedWriter — 효율적인 문자 출력 버퍼링

BufferedWriter — 효율적인 문자 출력 버퍼링

BufferedWriter는 문자를 버퍼에 모아 문자 출력 스트림에 텍스트를 쓰는 클래스예요. 단일 문자, 배열, 문자열을 효율적으로 쓰기 위해 문자를 버퍼링해 줍니다. 버퍼 크기를 지정할 수도 있고 기본 크기를 사용할 수도 있는데, 기본 크기는 대부분의 용도에 충분히 큽니다.

출처: Java API Reference

본문

이 클래스는 java.io.Writer를 상속하며 Closeable, Flushable, Appendable, AutoCloseable을 구현합니다. 플랫폼 고유의 줄 구분자 개념을 사용하는 newLine() 메서드를 제공해요. 모든 플랫폼이 개행 문자('\n')로 줄을 끝내는 것은 아니므로, 출력 줄을 끝낼 때 개행 문자를 직접 쓰는 것보다 newLine() 호출이 권장됩니다.

일반적으로 Writer는 출력을 즉시 기반 문자·바이트 스트림으로 보냅니다. 즉각적인 출력이 필요하지 않다면 write() 연산이 비쌀 수 있는 FileWriter, OutputStreamWriter 같은 WriterBufferedWriter로 감싸는 것이 좋아요.

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

이렇게 하면 PrintWriter의 출력이 파일에 버퍼링됩니다. 버퍼링이 없다면 print() 메서드 호출마다 문자가 바이트로 변환돼 즉시 파일에 쓰여 매우 비효율적일 수 있어요.

생성자

  • BufferedWriter(Writer out) — 기본 크기의 출력 버퍼를 사용하는 버퍼 문자 출력 스트림을 만들어요.
  • BufferedWriter(Writer out, int sz) — 주어진 크기의 출력 버퍼를 사용하는 새 버퍼 문자 출력 스트림을 만들어요. sz <= 0이면 IllegalArgumentException을 던져요.

메서드

  • void write(int c) — 단일 문자를 써요. IOException을 던질 수 있어요.
  • void write(char[] cbuf, int off, int len) — 문자 배열의 일부를 써요.
  • void write(String s, int off, int len) — 문자열의 일부를 써요.
  • void newLine() — 줄 구분자를 써요.
  • void flush() — 스트림을 플러시해요. 버퍼링된 문자를 기반 스트림으로 내보내요.
  • void close() — 스트림을 닫되 먼저 플러시해요.

BufferedWriter를 쓰면 문자 출력에서 시스템 호출 횟수를 줄여 성능을 개선할 수 있어요.

더 알아보기 (Learn more)