반응형

Stream 이란?

 

프로그램은 데이터를 외부에서 읽고, 외부로 출력하는 작업을 많이 합니다.
자바 / 코틀린 에서는 스트림(Stream)을 통하여 데이터가 입출력됩니다.
Stream의 사전적 의미로는 줄줄 흐르다, 줄줄이 이어지다 등의 뜻이 있는데, 이는 스트림이 단일 뱡향으로 연속적으로 흘러간다는 것을 의미합니다.

 

프로그램이 데이터를 입력받을 땐 입력스트림(InputStream)이라고 부르고
프로그램이 데이터를 출력할 땐 출력스트림(OutputStream)이라고 부릅니다.
즉, 프로그램을 기준으로 데이터가 들어오면 입력스트림, 데이터가 나가면 출력스트림입니다.
입력 스트림의 출발지는 키보드, 파일, 네트워크상의 프로그램등이 될 수 있고,
출력 스트림의 도착지는 모니터, 파일, 네트워크상의 프로그램등이 될 수 있습니다.

 

만약 프로그램이 네트워크 상의 다른 프로그램과 데이터를 교환하기 위해서는 두 프로그램 모두 입/출력 스트림이 각각 필요합니다.
이는 스트림이 단방향 통신이라는 특성을 가져 하나의 스트림으로 입/출력을 동시에 할 수 없기 때문입니다.


Java.io 패키지

Java.io패키지는 파일 시스템의 정보를 얻기 위한 File 클래스와 데이터를 입출력하기 위한 다양한 입출력 스트림 클래스를 제공해줍니다.

Java.io 패키지의 클래스 설명
File 파일 시스템의 파일 정보를 얻기 위한 클래스
Console 콘솔로부터 문자를 입출력하기 위한 클래스
InputStream / Outputstream 바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스
FileInputStream / FileOutputStream 바이트 단위 입출력을 위한 하위 스트림 클래스
DataInputStream / DataOutputStream
ObjectInputStream / ObjectOutputStream
PrintStream
BufferedInputStream / BufferedOutputStream
Reader / Writer 문자 단위 입출력을 위한 최상위 입출력 스트림 클래스
FileReader / FileWriter 문자 단위 입출력을 위한 하위 스트림 클래스
InputStreamReader / OutputStreamWriter
printWriter
BufferedReader / BufferedWriter

바이트 단위 입출력 스트림

  • 그림, 멀티미디어, 문자등 모든 종류의 데이터들을 주고받을 수 있음.

문자 단위 입출력 스트림

  • 오로지 문자만 주고받을 수 있음.

InputStream

InputStream은 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스입니다.
딸라서 모든 바이트 기반 입력 스트림은 이 클래스를 상속받습니다.

  • InputStream
    • FileInputStream
    • BufferedInputStream
    • DataInputStream

InputStream 클래스는 바이트 기반 입력 스트림들이 반드시 가져야할 메서드등이 정의되어 있습니다.

  • read()
    • 입력 스트림으로부터 1바이트를 읽고 읽은 바이트를 반환하는 메서드
  • read(byte[] b) 
    • 입력 스트림으로부터 읽은 바이트들을 매개값으로 주어진 바이트 배열 b에 저장하고 실제로 읽은 바이트 수를 반환하는 메서드
  • read(byte[] b, int off, int len)
    • 입력 스트림으로부터 len개의 바이트만큼 읽고 매개값으로 주어진 바이트 배열b[off]로부터 len개까지 저장하고 실제로 읽은 바이트 수인 len을 반환, 만약 len개를 모두 읽지 못하면 실제로 읽은 바이트 수를 반환하는 메서드
  • close()
    • 사용한 시스템 자원을 반납하고 입력스트림을 종료하는 메서드

OutputStream

마찬가지로 OutputStream은 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스입니다.

모든 바이트 기반 출력 스트림 클래스는 이 클래스를 상속받습니다.

  • OutputStream
    • FileOutputStream
    • PrintStream
    • BufferedOutputStream
    • DataOutputStream

OutputStream 클래스는 바이트 기반 출력 스트림들이 반드시 가져야할 메서드등이 정의되어 있습니다.

  • write(int b)
    • 출력 스트림으로부터 1바이트를 보내는 메서드(b의 끝 1 바이트)
  • write(byte[] b) 
    • 출력 스트림으로부터 주어진 바이트 배열 b의 모든 바이트를 보내는 메서드
  • write(byte[] b, int off, int len)
    • 출력 스트림으로부터 주어진 바이트 배열b[off]부터 len개의 바이트를 보내는 메서드
  • flush()
    • 버퍼에 남아있는 모든 바이트를 출력하는 메서드
  • close()
    • 사용한 시스템 자원을 반납하고 출력 스트림을 종료하는 메서드

FileInputStream & FileOutputStream 와 FileReader & FileWriter 의 차이

  • FileInputStream & FileOutputStream은 InputStrem & OutputStream을 상속받고 있음.
    FileReader & FileWriter는 Reader와 Writer를 상속받고 있음.
  • FileInputStream & FileOutputStream은 byte 단위의 입출력을 처리.
    FileReader & FileWriter는 바이트를 문자(Char)로 변환하여 입출력을 처리.
  • FileInputStream & FileOutputStream은 1바이트 이상의 문자인 한글등을 처리하기 위해 버퍼를 사용해서 처리해야함. FileReader & FileWriter는 한글도 처리가 가능.
  • FileInputStrem & FileOutputStream은 사진을 주고 받을 때 주로 사용.
    FileReader & FileWriter는 txt를 주고 받을 때 많이 사용.

참고

https://coding-factory.tistory.com/281

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=baeusa1&logNo=221455691288

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기