Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

보조 스트림 본문

Java/다양한 기능

보조 스트림

Seung__ 2021. 10. 31. 21:49

1. 보조 스트림


  • 실제 읽고 쓰는 스트림이 아닌 보조 기능을 제공하는 스트림
  • FilterInputStream과 FilterOutputStream이 보조 스트림의 최상위 클래스
  • 생성자의 매개변수로 또 다른 스트림(기반 스트림이나 보조 스트림)을 가짐
  • 즉 보조스트림 혼자만으로는 읽기/쓰기가 불가능하기 때문에 inputStream, outputStream을 주입받음.
  • Decorator Pattern으로 구현됨 
  • 상위 클래스 생성자
생성자 설명
protected FilterInputStream과(InputStream in) 생성자의 매개변수로 InputStream을 받습니다.
public FilterOutputStream(OutputStream out) 생성자의 매개변수로 OutputStream을 받습니다.

 

 

2. InputStreamReader와 OutputStreamWriter


  • 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림
  • FileInputStream으로 읽은 자료를 문자로 변환해주는 예
  • FileInputStream은 바이트 단위로 읽는다. 문자를 읽을 경우(문자는 최대 4바이트 단위) 깨짐
  • 이 때 FileInputStream을 InputStreamReader로 감싸서 사용이 가능하다.
  • InputStreamReader은 FileINputStream이 읽은 자료를 문자로 변경해줌.
public class InputStreamReaderTest {

    public static void main(String[] args) {

        try(InputStreamReader isr = new InputStreamReader(new FileInputStream("reader.txt"))){
            int i;
            while ((i=isr.read()) != -1){
                System.out.print((char) i);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

3. BufferedInputStream, BufferedOutputStream


  • 약 8k의 배열이 제공되어 입출력을 빠르게 하는 기능을 제공하는 보조 스트림
  • Bufferedreader와 BufferedWriter는 문자용 입출력 보조 스트림
  • BufferedInputStrem과 BufferedOutputStream을 이용하여 파일 복사하는 예
  • 먼저 Buffer기능이 없는 상태
public class FileCopyTest {

    public static void main(String[] args) {


        long millisecond = 0;

        try(FileInputStream fis = new FileInputStream("a.zip");
            FileOutputStream fos = new FileOutputStream("a_copy.zip")){

            millisecond = System.currentTimeMillis();

            int i;
            while ((i=fis.read()) != -1){
                fos.write(i);
            }

            millisecond = System.currentTimeMillis() - millisecond;
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(millisecond +"ms 소요됨");
    }
}

 

  • BufferedInputStrem과 BufferedOutputStream 사용
public class FileCopyTest {

    public static void main(String[] args) {


        long millisecond = 0;

        try(BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.zip"));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a_copy.zip"))){

            millisecond = System.currentTimeMillis();

            int i;
            while ((i=bis.read()) != -1){
                bos.write(i);
            }

            millisecond = System.currentTimeMillis() - millisecond;
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(millisecond +"ms 소요됨");
    }
}
  • 파일 크기가 너무 작아서 0ms 미만이 걸렸다.. ㅋㅋㅋㅋ

 

 

3-2. BufferedReader


  • 사용예시 : 아래처럼 보조스트림이 부가 기능을 제공함
        Socket socket = new Socket();
        //바이트 단위로 읽음
        InputStream inputStream = socket.getInputStream();
        //문자 핸들링
        InputStreamReader inputStreamReader = new InputStreamReader(socket.getInputStream());
        //버퍼 기능 추가
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  • 한 줄 씩 읽는 메서드는 BuffuredReader에서만 제공함
        //버퍼 기능 추가
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        bufferedReader.readLine()

 

 

4. GitHub : 211031 Auxiliary Stream


 

GitHub - bsh6463/various_functions

Contribute to bsh6463/various_functions development by creating an account on GitHub.

github.com

 

 

 

Comments