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
'코틀린[Kotlin]' 카테고리의 다른 글
BufferedReader & BufferedWriter - 빠른 입출력(Kotlin - 코틀린). feat, 자바 (0) | 2022.08.06 |
---|---|
코틀린에서 디렉터리 생성, 문자 기반의 파일(텍스트 파일) 생성 및 읽기 - 파일 입출력(FileWriter / FileReader) (0) | 2022.08.06 |
코틀린에서 Thread 사용하기( + start()-스레드 시작, join()-스레드 대기상태로 만들기) (0) | 2022.07.31 |
코틀린으로 크롤링하기(Jsoup) (0) | 2022.07.20 |
코틀린(Kotlin)에서 큐(Queue) 사용하기 (1) | 2022.07.08 |
최근댓글