바로 직전에 FileWriter를 활용하여 텍스트 파일에 글을 남기는 방법을 알아보았습니다. 이번 글에서는 FileWriter에다가 BufferedWriter까지 활용하여 글을 남기는 방법을 알아보도록 하겠습니다.


근데, 왜 FileWriter만으로도 할 수 있는 작업을 BufferedWriter까지 활용해야 하냐구요? 바로 성능의 문제입니다.


작은 데이터를 쓰는 경우에야 FileWriter만으로도 큰 문제가 없지만, 100K 내외 이상의 데이터를 써야 하는 경우에는 성능상으로 봤을 때 BufferedWriter를 함께 사용하는 것이 더 효율적이라고 합니다. 그렇다면 여기서 등장하는 버퍼 (buffer)라는 개념은 무슨 의미일까요?


버퍼라는 단어 자체는 '완충'이라는 의미를 갖고 있습니다. 그리고 컴퓨터 과학에서 말하는 버퍼는 데이터가 한곳에서 다른 곳으로 이동하는 동안 일시적으로 그 데이터를 저장하는 메모리 공간을 의미합니다. 버퍼에 일정 이상의 데이터가 담기면 그 데이터는 다른 곳으로 전송이 되고, 새로운 데이터가 담기게 되는 과정을 반복합니다. 만약 버퍼가 없는 상태로 입출력을 주고 받는 경우라면, 입출력이 될때마다 매번 데이터를 처리하는 과정을 거쳐야 하므로 CPU 사용 횟수와 메모리 접근 횟수가 많아집니다. 버퍼를 사용함으로써 CPU 사용 횟수와 메모리 접근 횟수를 줄일 수 있으며, 따라서 입출력의 속도를 개선할 수 있는 겁니다. 


코드를 보이기에 앞서 우선 글로 사용법을 설명하자면, 이 역시 어려울것 하나 없습니다. BufferedWriter 인스턴스를 하나 더 생성하고, 그 인스턴스의 인자로 FileWriter 인스턴스를 집어넣으면 끝입니다. 그리고 write()와 flush() 메소드가 BufferedWriter 인스턴스를 통해 쓰여지게 하면 됩니다.


다음은 예제 코드입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
 
public class WriteToFile {
    public static void main(String args[]) {
        
        String message = "This is a sample message.\n";
        
        File file = new File("test1.txt");
        FileWriter writer = null;
        BufferedWriter bWriter = null;
        
        try {
            writer = new FileWriter(file, true);
            bWriter = new BufferedWriter(writer);
            
            bWriter.write(message);
            bWriter.flush();
            
            System.out.println("DONE");
        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(bWriter != null) bWriter.close();
                if(writer != null) writer.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
}
 
cs


반응형

+ Recent posts