ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • InputStream 과 OutputStream에 차이 !
    자바웹프로그래밍/JAVA 2024. 7. 24. 14:18
    728x90
    반응형

     

    OutputStream과 InputStream은 Java의 I/O 시스템에서 데이터를 순차적으로 읽고 쓰는 데 사용되는 기본적인 스트림 클래스입니다. 이 두 클래스는 각각 출력과 입력에 대한 추상적인 개념을 제공합니다.

     

    차이점

    1. 역할:
      • InputStream: 데이터를 소스(파일, 네트워크, 메모리 등)에서 읽어 들입니다.
      • OutputStream: 데이터를 대상(파일, 네트워크, 메모리 등)으로 씁니다.
    2. 메소드:
      • InputStream: 주로 read 메서드를 사용하여 데이터를 읽습니다. 대표적인 메서드는 다음과 같습니다:
        • int read(): 한 바이트를 읽고, 0에서 255 사이의 값을 반환하거나, 더 이상 데이터가 없으면 -1을 반환합니다.
        • int read(byte[] b): 바이트 배열 b에 데이터를 읽습니다.
        • int read(byte[] b, int off, int len): 바이트 배열 b의 off 위치부터 최대 len 바이트를 읽습니다.
        • void close(): 스트림을 닫습니다.
      • OutputStream: 주로 write 메서드를 사용하여 데이터를 씁니다. 대표적인 메서드는 다음과 같습니다:
        • void write(int b): 한 바이트를 씁니다.
        • void write(byte[] b): 바이트 배열 b의 모든 바이트를 씁니다.
        • void write(byte[] b, int off, int len): 바이트 배열 b의 off 위치부터 len 바이트를 씁니다.
        • void close(): 스트림을 닫습니다.
    3. 예외 처리: 두 클래스 모두 입출력 작업 중 발생할 수 있는 예외를 처리하기 위해 IOException을 던집니다.

    예제

    다음은 파일을 읽고 쓰기 위한 InputStream과 OutputStream의 실제 사용 예제입니다.

    파일 쓰기 예제 (OutputStream 사용)

     

    import java.io.FileOutputStream;
    import java.io.BufferedOutputStream;
    import java.io.IOException;
    
    public class OutputStreamExample {
        public static void main(String[] args) {
            String data = "Hello, World!";
            try (FileOutputStream fos = new FileOutputStream("output.txt");
                 BufferedOutputStream bos = new BufferedOutputStream(fos)) {
                bos.write(data.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

     

    이 예제에서:

    • FileOutputStream은 파일에 데이터를 쓰기 위한 기본 스트림입니다.
    • BufferedOutputStream은 버퍼링을 통해 쓰기 성능을 향상시킵니다.
    • data.getBytes()는 문자열 데이터를 바이트 배열로 변환합니다.

     

    파일 읽기 예제 (InputStream 사용)

    import java.io.FileInputStream;
    import java.io.BufferedInputStream;
    import java.io.IOException;
    
    public class InputStreamExample {
        public static void main(String[] args) {
            try (FileInputStream fis = new FileInputStream("output.txt");
                 BufferedInputStream bis = new BufferedInputStream(fis)) {
                int data;
                while ((data = bis.read()) != -1) {
                    System.out.print((char) data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

     

    이 예제에서:

    • FileInputStream은 파일에서 데이터를 읽기 위한 기본 스트림입니다.
    • BufferedInputStream은 버퍼링을 통해 읽기 성능을 향상시킵니다.
    • bis.read()는 파일에서 한 바이트씩 읽어 들이며, 더 이상 읽을 데이터가 없으면 -1을 반환합니다.

    요약

    • **InputStream**은 데이터를 읽는 데 사용되고, **OutputStream**은 데이터를 쓰는 데 사용됩니다.
    • InputStream의 주요 메서드는 read이고, OutputStream의 주요 메서드는 write입니다.
    • 스트림을 사용할 때는 항상 예외 처리를 하고, 사용 후 스트림을 닫아야 합니다.

    이와 같은 스트림 기반의 I/O는 Java에서 데이터를 효율적이고 일관되게 처리할 수 있도록 도와줍니다.

    728x90
    반응형
Designed by Tistory.