본문 바로가기
Java

java.io.InputStream & OutputStream

by Mecodata 2023. 12. 20.

Stream

- 입출력 장치에서 데이터를 읽고 쓰기 위해 자바에서 제공하고 있는 클래스

- 단방향으로 흐르기 때문에 입출력을 동시에 진행하기 위해서는 2개의 스트림(입력, 출력)이 필요

 

java.io.InputStream

- Java에서 데이터의 타입과 상관없이 입력 스트림을 다루는 데(데이터 읽음) 사용되는 클래스 → 모든 데이터(이미지, 동영상 포함)를 바이트 단위로 처리

하위 클래스

- FileInputStream = 파일에서 바이트 단위로 데이터를 읽어오는데 사용

- ByteArrayInputStream = 바이트 배열에서 바이트 단위로 데이터를 읽어오는데 사용

- BufferedInputStream = 입력 스트림에 버퍼링 기능 추가

- PipedInputStream = 파이프로부터 바이트 단위로 데이터를 읽어오는데 사용 (스레드 간 데이터 교환)

- DataInputStream = 기본 자료형 데이터를 읽을 수 있는 메소드를 제공

- ObjectInputStream = 객체 데이터를 읽을 수 있는 클래스로, 직렬화된 객체를 역직렬화할 때 사용

주요 메소드 

read() = 데이터(바이트) 읽기 (아스키코드값(int)으로 반환 - 문자로 표현하려면 char로 형변환 필요)

skip(Long n) = n 바이트를 건너 뛰고 읽기

 

- mark() = 입력 스트림에서의 현재 위치 마킹

- markSupported() = 입력 스트림에서 마킹한 부분이 있는지 여부

- reset() = 마지막으로 mark()를 호출한 부분으로 이동

 

available() = 읽을 수 있는 바이트 수 반환

close() = 입력 스트림 닫기

 

java.io.OutputStream

- Java에서 데이터의 타입과 상관없이 력 스트림을 다루는 데(데이터 작성) 사용되는 클래스 

하위 클래스

- FileOutputStream = 파일에 데이터를 쓰기위해 사용

- ByteArrayOutputStream = 바이트 배열에 데이터를 쓰기위해 사용

- BufferedOutputStream = 출력 스트림에 버퍼링 기능 추가

PipedOutputStream = 파이프에 데이터를 쓰기위해 사용

- DataOutputStream = 기본 데이터 타입을 이진 형식으로 출력

- ObjectOutputStream = 객체를 직렬화하여 출력

 

주요 메소드 

- write() = 출력 스트림에 데이터 작성(담기) - 파라미터의 데이터 타입 = byte[], int

- flush() = 버퍼 비우기 (버퍼에 남아있는 데이터를 출력 대상에 강제로 전송) 

- close() = 출력 스트림 닫기

※ close()는 내부적으로 flush()를 호출하지만 스트림에 에러가 발생하여 종료되더라도 버퍼에 데이터가 남을 수 있기 때문에 close() 이전에 flush()를 선행하는 것이 바람직함

'Java' 카테고리의 다른 글

java.net.URL  (0) 2023.12.20
java.io.File  (0) 2023.12.20
java.io.Reader & Writer  (0) 2023.12.20
java.util.Properties  (0) 2023.12.19
BufferedReader/BufferedWriter  (0) 2023.12.19

댓글