로그 데이터를 파일에 저장하기 위해서 BufferedWriter 클래스를 사용하다가, 갑자기 BufferedOutputStream으로 처리하는 것과의 성능상 차이에 대해서 확인하고 싶어서, 동일한 데이타를 파일에 저장해 봤다. 두 클래스의 성능 차이는 별로 없어 보이지만 그래도 확인 해 보자. 아래의 BufferWriterTest, BufferOutputStream 클래스의 buffersize는 1024로 동일하다.
– BufferWriterTest.java
import java.util.*; import java.text.*; import java.io.*; public class BufferWriterTest { // static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); static String txt = "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하마바사아자차타파하"; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Date start = new Date(); System.out.println("s – " + df.format(start)); BufferedWriter bufferWriter; try { bufferWriter = new BufferedWriter(new FileWriter("c:\\BufferedWriter.txt", true), 1024); for (int i = 0; i < 5000000; i++) { bufferWriter.write(BufferWriterTest.txt); bufferWriter.newLine(); } bufferWriter.flush(); bufferWriter.close(); } catch (IOException e) { e.printStackTrace(); } Date end = new Date(); System.out.println("e – " + df.format(end)); } }
결과(3.15G 파일 쓰기)
s – 2009-06-19 15:55:00:968
e – 2009-06-19 15:55:48:280
– BufferOutputStreamTest.java
import java.io.IOException; import java.io.FileOutputStream; import java.io.BufferedOutputStream; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class BufferOutputStreamTest { // static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); static String txt = "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하가나다라마바사아자차타파하가나다라마바사아자차타파하" + "가나다라마바사아자차타파하마바사아자차타파하"; /** * * @param args */ public static void main(String[] args) { Date start = new Date(); System.out.println("s – " + df.format(start)); BufferedOutputStream bufferedOutput; try { bufferedOutput = new BufferedOutputStream(new FileOutputStream("c:\\BufferedStream.txt", true), 1024); for (int i = 0; i < 5000000; i++) { bufferedOutput.write(txt.getBytes()); bufferedOutput.write("\n".getBytes()); } bufferedOutput.close(); } catch (IOException e) { e.printStackTrace(); } Date end = new Date(); System.out.println("e – " + df.format(end)); } }
결과(3.15G 파일 쓰기, )
s – 2009-06-19 15:56:41:889
e – 2009-06-19 15:58:19:825
위 결과를 보면, 비슷한 사이즈의 파일을 추가할 경우에 꽤 성능차이가 난다. 느낌에는 비슷한 성능을 낼 것으로 생각이 드는데, 스트링 처리는 Reader/Writer 시리즈가 더 적합하다는 것인가? 혹시 아래의 구조 때문에 그럴까요? 아시는 분은 조언을..
BufferedWriter | BufferedOutputStream |
java.lang.Object – java.io.Writer – java.io.BufferedWriter |
java.lang.Object – java.io.OutputStream – java.io.FilterOutputStream – java.io.BufferedOutputStream |