Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java BufferedWriter의 flush() 메서드란? 버퍼 비우기의 목적과 사용법

Java에서 BufferedWriter 객체를 사용해 스트림에 데이터를 쓸 때는 주의할 점이 있습니다. write() 메서드를 호출하더라도 데이터는 우선 내부 버퍼에만 저장될 뿐, 실제로 출력되지 않습니다.

바로 이때 flush() 메서드가 필요합니다. flush()는 버퍼에 임시로 저장된 내용을 기반 스트림(underlying stream)으로 밀어 넣어 실제 출력을 수행하는 역할을 합니다.

flush() 없이 write()만 호출한 예제

다음 Java 프로그램은 콘솔(표준 출력 스트림)에 한 줄의 문장을 출력하려고 합니다. 필요한 문자열을 전달하며 write() 메서드를 호출하고 있습니다.

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class BufferedWriterExample {
   public static void main(String args[]) throws IOException {
      //OutputStreamWriter 클래스 인스턴스 생성
      OutputStreamWriter out = new OutputStreamWriter(System.out);
      //BufferedWriter 인스턴스 생성
      BufferedWriter writer = new BufferedWriter(out);
      //콘솔에 데이터 쓰기
      writer.write("Hello welcome to Tutorialspoint");
   }
}

그러나 위 코드를 실행해도 아무것도 출력되지 않습니다. BufferedWriter의 버퍼에 담긴 내용을 비우지(flush) 않았기 때문입니다.

flush()를 호출한 올바른 예제

이 문제를 해결하려면 write() 실행 후 flush() 메서드를 호출해야 합니다.

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class BufferedWriterExample {
   public static void main(String args[]) throws IOException {
      //OutputStreamWriter 클래스 인스턴스 생성
      OutputStreamWriter out = new OutputStreamWriter(System.out);
      //BufferedWriter 인스턴스 생성
      BufferedWriter writer = new BufferedWriter(out);
      //콘솔에 데이터 쓰기
      writer.write("Hello welcome to Tutorialspoint");
      writer.flush();
   }
}

실행 결과

Hello welcome to Tutorialspoint

정리: flush()와 close()의 차이

close() 메서드를 호출하면 내부적으로 flush가 자동으로 수행되며 스트림도 함께 닫힙니다. 반면 flush()는 스트림을 열어 둔 상태에서 버퍼의 내용만 즉시 출력하고 싶을 때 사용합니다. 따라서 스트림을 계속 사용해야 하는 상황이라면 close() 대신 flush()를 호출하는 것이 올바른 방법입니다.