FileWriter
과 BufferedOutputStream
을 실제로 비교하려면 텍스트 파일을 쓰는 것이 더 빠릅니다. I/O 작업이 적기 때문에 후자가 더 빠릅니다.
FileWriter
의 경우, 쓰기 메소드에 대한 각 호출은 한 번에 지속됩니다 (버퍼링되지 않음).
BufferedOutputStream
의 경우 버퍼가 가득 차면 (또는 버퍼가 flush
메서드를 사용하여 명시 적으로 플러시 된 경우) 데이터가 디스크에 기록됩니다.
하지만 텍스트 파일을 작성하는 경우, 당신은 Writer
를 사용한다;
이
FileWriter fw = new FileWriter(...)
및
BufferedWriter bw = new BufferedWriter(new FileWriter(...)
보면 당신은 I/O 작업의 수에 대한 같은 상황이이 경우에 우리는 FileWriter
BufferedWriter
와 비교할 수 있습니다.
FileWriter
내부적
FileOutputStream
이용한다.
FileWriter
을 사용하는 이유는 파일에 쓸 때 (Java 내부 문자열이 예를 들어 UTF-8로 인코딩 됨) 자동으로 기본 문자 인코딩을 사용하기 때문입니다.당신이
OutputStream
를 사용하는 경우, 각 쓰기에서 수동으로 인코딩 할 필요가 : 그래서
BufferedWriter
이 예 :
bw.write("Hello");
이
BufferedOutputStream
동안 그 예에 해당합니다
bos.write("Hello".getBytes(Charset.forName("utf-8")));
경우 기본 인코딩은 utf-8
입니다.
OutputStream
은 (원시) 바이트를 처리하는 반면 Writer
은 (텍스트) 문자를 처리합니다.
Thanks @ Joni (+1) - 재미있는 관찰이지만 'BufferedOutputStream'을 사용하여 파일에 텍스트를 쓸 수 없습니까?!? [이 기사] (http://www.javadb.com/write-to-file-using-bufferedoutputstream)는 다르게 생각하는 것 같다. 그 기사가 사실이라면,'FileWriter'와'BufferedOutputStream'은 2 가지 다른 용도로 쓰일 수도 있지만, 텍스트를 파일에 쓸 때 성능을 비교하는 것이 가능합니다. –
다시, 매우 흥미로운 것들 @ 조니! [이 질문에 따라] (http://stackoverflow.com/questions/6108043/java-does-filewriter-use-a-buffer-it-acts-like-it-does-in-my-example)에 따르면 'FileWriter'가 사용하는 내부 버퍼를 오버라이드 (override) 할 수 있습니다. 내 자신의 즐거움을 위해서라면 이걸 시험해보고 싶습니다. 필자의 삶을 위해 나는'OutputStreamWriter'와'FileOutputStream'을 어떻게 설정하고 그들을'FileWriter' 생성자 - 어떤 아이디어로 주입시키는지를 알 수 없습니까? 그리고 새 버퍼 크기는 어디에 지정해야합니까? 지금까지 모든 위대한 도움에 다시 한번 감사드립니다! –
기사에서 볼 수 있듯이 먼저 BufferedOutputStream을 사용하여 텍스트를 쓰기 위해 바이트를 수동으로 바이트로 변환합니다. 불편한 getBytes를 호출하여 즉시 가비지가되는 바이트 배열을 만듭니다 – Joni