[자바] 입력과 출력 : 스트림(Stream)

1 분 소요

스트림(Stream)

  • 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(Stream)이라는 흐름을 통해 다룬다.
  • 스트림이란 실제의 입력이나 출력이 표현데이터의 이상화된 흐름을 의미.
    • 즉, 스트림은 운영체제의 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다.

    자바 스트림

  • 💡 Java SE 8 버전부터 추가된 스트림 API는 앞서 설명한 스트림과는 전혀 다른 개념이다.

입출력 스트림

  • 스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수 없다.
    • 따라서, 스트림은 사용 목적에 따라 입력 스트림출력 스트림으로 구분된다.
  • 자바에서는 java.io 패키지를 통해 InputStreamOutputStream 클래스를 별도로 제공하고 있다.
    • 즉, 자바에서의 스트림 생성이란 이러한 스트림 클래스 타입인스턴스를 생성한다는 의미.
  • InputStream 클래스에는 read() 메소드가, OutputStream 클래스에는 write() 메소드가 각각 추상 메소드포함되어 있다.
    • 이 두 메소드를 상황에 맞게 적절히 구현해야만 입출력 스트림을 생성하여 사용할 수 있다.
    클래스 메소드 설명
    InputStream abstract int read() 입력 스트림으로부터 다음 바이트를 읽어들임. 1 바이트씩 읽어 들이며, 읽은 1 바이트의 값을 int 형으로 반환
      int read(byte[] b) 입력 스트림으로부터 배열 길이 바이트만큼을 읽어들인 후, 배열 b에 저장. 읽은 바이트 수를 int 형으로 반환
      int read(byte[] b, int off, int len) 입력 스트림으로부터 len만큼의 바이트를 읽어들인 후, 배열 b[off]부터 저장. 읽은 바이트 수를 int 형으로 반환
    OutputStream abstract void write(int b) 출력 스트림에 1 바이트를 저장. 매개 변수로 주어진 int 값에서 끝에 있는 1 바이트만 저장
      void write(byte[] b) 배열 b의 모든 바이트를 출력 스트림에 저장
      void write(byte[] b, int off, int len) 배열 b[off]부터 len 바이트만큼을 출력 스트림에 저장
    • 💡 read() 메소드는 해당 입력 스트림에서 더 이상 읽어들일 바이트가 없으면, -1을 반환해야 한다.
      • 그런데 1 Byte의 데이터를 받으려면 0부터 255까지의 바이트 정보를 표현할 수 있어야 하는데, 자바는 unsigned 형이 없으므로 자바의 Byte로는 -128부터 127까지의 바이트 정보만 표현할 수 있다.
      • 또한, 만약 unsigned 형이 가능하여 0부터 255까지의 바이트 정보를 표현할 수 있다고 하더라도 -1을 표현할 수 없게 된다.
      • 따라서, inputStreamread() 메소드는 반환 타입을 int 형으로 선언하고 있다.

출처

태그: ,

카테고리:

업데이트: