'FilterOutputStream'에 해당되는 글 1건

  1. BufferedOutputStream vs BufferedWriter (2) 2009/06/19
흠.. 로그 처리를 위한 파일에 스트링을 추가하는 클래스를 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

BufferOutputStream.java
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

public class BufferOutputStream {
    //
    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));
               
        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.10G 파일 쓰기)

s - 2009-06-19 15:56:41:889
e - 2009-06-19 15:58:19:825

위 결과로 보면, 비슷한 사이즈의 파일을 추가할 경우에 실행속도가 꽤 차이가 나네요.. ^^;;
그냥 느낌에는 비슷한 실행시간이 될 것으로 생각이 들었는데요..
아래의 구조때문에 그럴까요?? 혹시 아시는 분은 조언을.. 

BufferedWriter BufferedOutputStream
java.lang.Object
  - java.io.Writer
    - java.io.BufferedWriter
java.lang.Object
 - java.io.OutputStream
   - java.io.FilterOutputStream
     - java.io.BufferedOutputStream