ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] IO스트림 이란? / InputStream, OutputStream
    JAVA 2022. 8. 20. 20:37

     

     오늘은 JAVA에 IO스트림에 대해 알아볼까 한다. 최근 프로젝트 진행시 파일 입출력 및 타 시스템 연계에 있어 I/O스트림을 접하게 된 상황이 있는데 개념이 부족함을 느꼈다.... 

     

    Stream 이란?

     일반적으로 프로그램이 외부데이터를 읽거나 외부에 데이터를 출력하는 작업을 하게 되는 경우가 있다. 이때 데이터가 흐르는 통로가 있을것이며 그 통로를 Stream이라고 한다. Stream에 데이터 흐르는 방향은 단일 방향이다. 그렇기 때문에 

    InputStream과 OutputStream이 나눠져 있다. 또한 입출력 단위는 바이트, 문자로 나뉜다.

     - 바이트 : 동영상, 이미지, 오디오 등 바이너리 파일이 해당. 1byte

     - 문자 : 한글, 한자 등이 해당. 2byte

     

    I/O Stream 종류

     

        입력 출력
    바이트 상위클래스 InputStream OutputStream
    하위 클래스 AudioInputStream
    ByteArrayInputStream
    FileInputStream
    FilterInputStream
    ObjectInputStream
    PipedInputStream
    SequenceInputStream
    StringBufferInputStream
    ByteArrayOutputStream
    FileOutputStream
    filterOutputStream
    ObjectOutputStream
    PipedOutputStream
    문자 상위클래스 Reader Writer
    하위클래스 BufferedReader
    CharArrayReader
    FilterReader
    InputStreamReader
    PipedReader
    StringReader
    BufferedWriter
    CharArrayWriter
    FilterWriter 
    OutputStreamWriter
    PipedWriter
    PrintWriter
    StringWriter

     

     

    InputStream 주요 메서드

    1. int available() - 스트림에서 읽을 수 있는 바이트 개수를 리턴한다.

        public int available() throws IOException {
            return 0;
        }

     

    2. void close() - 스트림을 닫고 자원을 해제한다.

        public int readNBytes(byte[] b, int off, int len) throws IOException {
            Objects.checkFromIndexSize(off, len, b.length);
    
            int n = 0;
            while (n < len) {
                int count = read(b, off + n, len - n);
                if (count < 0)
                    break;
                n += count;
            }
            return n;
        }

     

    3. int read(byte[] b) - 지정된 배열 크기만큼 읽고 버퍼배열에 저장, 읽은 개수를 리턴한다.

        public int read(byte b[]) throws IOException {
            return read(b, 0, b.length);
        }

     

     

    OutputStream 주요 메서드

    1. void close() - 스트림을 닫고 모든 시스템 리소스를 해제한다. 작업을 출력하고 다시 열 수 없다.

    2. void flush() - 출력 스트림을 플러시하고 버퍼링된 출력 바이트를 강제 실행한다. 다시 말해 버퍼를 비우고 버퍼내의 모든 데이터를 출력한다.

    3. void write(byte[] b) - 바이트배열을 출력한다.

        public void write(byte b[]) throws IOException {
            write(b, 0, b.length);
        }

     

     

    Reader 주요 메서드

    1. int read() - 문자를 하나 읽고 읽은 문자값을 유니코드 값으로 리턴한다. 읽을 값이 없다면 -1을 리턴한다.

        public int read() throws IOException {
            char cb[] = new char[1];
            if (read(cb, 0, 1) == -1)
                return -1;
            else
                return cb[0];
        }

     

    2. int read(char[] cbuf) - 문자를 하나씩 읽어 cbuf에 저장하고 읽은 문자개수를 리턴한다.

        public int read(char cbuf[]) throws IOException {
            return read(cbuf, 0, cbuf.length);
        }

     

    3. abstract int read(char[] b, int start, int length) - 문자를 length만큼 읽고, cbuf의 start부터 저장하며 읽은 문자개수를 리턴한다.

        public abstract int read(char cbuf[], int off, int len) throws IOException;

     

    4. abstract void close() - 스트림을 닫고 과련 시스템 리소스를 해제한다.

         public abstract void close() throws IOException;

     

    Writer 주요 메서드

    1. void write(char[] cbuf) - char 배열 내용을 작성한다.

        public void write(char cbuf[]) throws IOException {
            write(cbuf, 0, cbuf.length);
        }

     

    2. abstract write(char[] cbuf, int start, int length) - char 배열 내용을 start부터 length까지 작성한다.

        public abstract void write(char cbuf[], int off, int len) throws IOException;

     

    3. void write(String str) - str을 작성한다. 

        public void write(String str) throws IOException {
            write(str, 0, str.length());
        }

     

    4. abstract void flush() - 버퍼를 비운다. 

        public abstract void flush() throws IOException;

     

    5. abstract void close() - 스트림을 닫고 자원을 해제한다.

     

     

    ※ 수정이 필요한 내용에 대해선 댓글 남겨주시면 수정토록 하겠습니다.

     

    'JAVA' 카테고리의 다른 글

    DTO vs VO  (0) 2025.04.16
    [JAVA] Lombok과 자주사용하는 어노테이션  (1) 2022.07.06

    댓글

#dev-hahm#