Java - BufferedReader, BufferedWriter 예제

BufferedReader, BufferedWriter는 Buffer를 이용하여 데이터를 읽거나 쓰도록 구현된 클래스입니다.

데이터를 읽거나 쓸 때마다 I/O에 접근하지 않고 Buffer에 저장해둔 것을 읽거나 Buffer에 쓰기 때문에 I/O 작업 빈도가 적습니다. I/O에 접근하는 빈도가 적기 때문에 이로 인해 read/write 성능이 좋아집니다.

BufferedReader

다음과 같이 BufferedReader 객체를 생성할 수 있습니다. 보시는 것처럼 FileReader 객체로 데이터를 읽게되고, 이 FileReader에 Buffer를 적용하게 됩니다. Buffer는 기본적으로 8kb로 설정됩니다.

BufferedReader reader =
        new BufferedReader(new FileReader("src/main/resources/input.txt"));

Buffer size를 변경하고 싶다면 두번째 인자로 byte를 입력하면 됩니다. 아래는 16kb로 설정하는 예제입니다.

BufferedReader reader = new BufferedReader(
            new FileReader("src/main/resources/input.txt"), 16384); // 16kb

데이터 출력

BufferedReader로부터 데이터를 읽으려면 readLine()을 이용하면 됩니다. readLine()은 개행문자(\n)를 기준으로 한 줄을 모두 읽어올 수 있습니다. null이 리턴되면 파일의 끝에 도달했음을 의미하며 읽는 것을 중단하면 됩니다.

BufferedReader reader =
        new BufferedReader(new FileReader("src/main/resources/input.txt"));

String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

Output:

Reads text from a character-input stream, buffering characters so as to provide for the efficient reading of characters, arrays, and lines.
The buffer size may be specified, or the default size may be used. The default is large enough for most purposes.

사용자로부터 입력 받기

위의 예제들은 파일을 읽는 예제입니다.

사용자로부터 데이터를 받으려면 다음과 같이 객체를 생성하면 됩니다.

BufferedReader reader =
        new BufferedReader(new InputStreamReader(System.in));

다음과 같이 사용자로부터 입력을 받는 동시에 출력하도록 구현할 수 있습니다.

BufferedReader reader =
        new BufferedReader(new InputStreamReader(System.in));

String line;
while ((line = reader.readLine()) != null) {
    System.out.println("Output: " + line);
}

아래는 Console에서 12345, abcde를 입력했을 때 출력되는 내용입니다. 개행문자(\n)를 기준으로 line을 구분하기 때문에 Enter를 입력해야 화면에 readline()이 리턴됩니다.

12345
Output: 12345
abcde
Output: abcde

BufferedWriter

다음과 같이 어떤 File에 데이터를 쓰기위해 BufferedWriter 객체를 생성할 수 있습니다.

BufferedWriter writer = new BufferedWriter(
        new FileWriter("src/main/resources/output.txt"));

Reader와 동일하게 기본 Buffer size는 8kb이며 size를 조정하고 싶다면 두번째 인자에 직접 입력하면 됩니다.

BufferedWriter writer = new BufferedWriter(
        new FileWriter("src/main/resources/output.txt"), 16384); // 16kb

파일에 데이터 쓰기

BufferedWriter 객체를 생성하였다면, append()로 데이터를 버퍼에 쓸 수 있습니다. 데이터를 버퍼에 쓴다고 파일에 저장되진 않습니다. 다음과 같이 flush()를 호출하면 버퍼의 내용이 파일에 저장됩니다.

BufferedWriter writer = new BufferedWriter(new FileWriter("src/main/resources/output.txt"));
writer.append("Test\n");
writer.flush();

writer.append("Test\n");
writer.flush();

또는 다음과 같이 close()를 호출하여 BufferedWriter의 FD를 닫으면서 버퍼의 내용을 파일에 쓰도록 할 수 있습니다. close()를 한번 호출하면 더 이상 데이터를 쓸 수 없습니다. flush()를 사용하는

BufferedWriter writer = new BufferedWriter(new FileWriter("src/main/resources/output.txt"));
writer.append("Test\n");
writer.close();

flush(), close()를 호출하지 않아도 버퍼가 파일에 저장될 때가 있습니다. append()로 버퍼보다 큰 양의 데이터를 입력하면, 자동으로 flush()가 호출되면서 버퍼의 데이터가 파일에 저장됩니다.

Console에 데이터 출력

위의 예제들은 BufferedWriter를 이용하여 파일에 데이터를 쓰는 예제입니다.

다음과 같이 Console 화면에 데이터를 출력하도록 만들 수도 있습니다.

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.append("Test\n");
writer.append("BufferedWriter\n");
writer.close();

다음은 위의 코드를 실행했을 때 화면에 출력되는 내용입니다.

Test
BufferedWriter
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha