본문 바로가기
java

스트림(stream)

by 코딩하는아재냥 2022. 4. 30.

대표적인 파일 입출력 기능 >> control c , control v

스트림

자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림이라는 흐름을 통해 다룹니다.

>> 데이터가 오가는 길 , 일방통행입니다~

 

스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미

즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자  역할

 

 입출력 스트림

스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없습니다.

따라서 스트림은 사용 목적에 따라 입력 스트림과 출력 스트림으로 구분됩니다.

자바에서 스트림 생성이란 이러한 스트림 클래스 탑의 인스턴스를 생성한다는 의미

 

 


 

InputStream abstract int read() 해당 입력 스트림으로부터 다음 바이트를 읽어들임.
int read(byte[] b) 해당 입력 스트림으로부터 특정 바이트를 읽어들인 후, 배열 b에 저장함.
int read(byte[] b, int off, int len) 해당 입력 스트림으로부터 len 바이트를 읽어들인 후, 배열 b[off]부터 저장함.
OutputStream abstract void write(int b) 해당 출력 스트림에 특정 바이트를 저장함.
void write(byte[] b) 배열 b의 특정 바이트를 배열 b의 길이만큼 해당 출력 스트림에 저장함.
void write(byte[] b, int off, int len) 배열 b[off]부터 len 바이트를 해당 출력 스트림에 저장함.

read() 메소드는 해당 입력 스트림에서 더 이상 읽어들일 바이트가 없으면, -1을 반환해야 합니다.
그런데 반환 타입을 byte 타입으로 하면, 0부터 255까지의 바이트 정보는 표현할 수 있지만 -1은 표현할 수 없게 됩니다.
따라서 InputStream의 read() 메소드는 반환 타입을 int형으로 선언하고 있습니다.


바이트 기반 스트림 >> 문자 or 이미지 바이트 둘다 상관x

 

자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송합니다

자바에서는 다음과 같은 다양한 바이트 기반의 입출력 스트림을 제공하고 있습니다.

 

입력 스트림출력 스트림입출력  대상
FileInputStream FileOutputStream 파일
ByteArrayInputStream ByteArrayOutputStream 메모리
PipedInputStream PipedOutputStream 프로세스
AudioInputStream AudioOutputStream 오디오 장치

 


보조 스트림

자바에서 제공하는 보조 스트림은 실제로 데이터를 주고받을 수는 없지만, 다른 스트림의

기능을 향상시키거나 새로운 기능을 추가해 주는 스트림입니다.


문자 기반 스트림 >> 문자만

자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송합니다.

하지만 자바에서 가장 작은 타입인 char 형이 2바이트이므로, 1바이트씩 전송되는 바이트 기반 스트림으로 원활한 처리가 힘든 경우가 있습니다.

 

따라서 자바에서는 바이트 기반 스트림뿐만 아니라 문자 기반의 스트림도 별도로 제공합니다.

이러한 문자 기반 스트림은 기존의 바이트 기반 스트림에서 

 


예시


 

 

'java' 카테고리의 다른 글

람다 표현식  (0) 2022.05.02
자바API클래스(Arrays 클래스)  (0) 2022.04.30
멀티 쓰레드(Thread),데몬 쓰레드(deamon thread),쓰레드 그룹  (0) 2022.04.28
쓰레드(Thread),쓰레드 구현하는방법  (0) 2022.04.28
properties  (0) 2022.04.27

댓글