Backend/JAVA

자바(8)- Stream(Input/Output)

creativeDeveloper! 2022. 9. 21. 18:01
728x90

1.  stream이란?

- system 안으로 또는 밖으로 이동하는 Data의 흐름을 Stream 이라고 한다.

2.  Inputstream / Outputstream

 inputstream/outputstream은 byte 기반 최상위 클래스
- 하위 클래스들은 특화된 분야가 있다. 

-> 그래서 InputStream/outputStream을 직접 사용하는 경우는 드뭄

* system.in : 키보드로부터 데이터를 입력받을 수 있음
- read() 메서드 사용시 키보드로 입력한 데이터를 알 수 있음

 * system.out : 콘솔로 데이터를 출력하는데 사용
- 1개의 바이트 출력을 위해서 outputstream의 write메서드를 사용

* flush로 털고 close로 닫아준다.
1. 손님을 맞이한다-> inputstream
2. 방문 목적에 맞는 일을 한다 -> read
3. 함께 외출을 한다. -> outputstream
4. 외출 전 점검(문단속, 가스밸브.) -> flush
5. 문을 닫고 잠근다 -> close

* File class
- File은 I/O에 해당하는 클래스가 아니다.
- java에서 file/directory등을 다룰 수 있게 해주는 객체
- File에 Data를 읽고 쓰는 기능은 stream을 통해 이루어짐

ex) File file = new File(" 경로 ");

* File I/O Stream
- File 객체에 stream을 활용하면 파일을 복사할 수 있다.
- 이때 , File에 특화된 File Inputstream, File output stream을 사용한다.

* File I/O Stream
- File Input Stream을 이용하여 텍스트 파일을 읽어 출력하는 과정
1. 읽어올 파일 위치를 설정
2. 파일을 객체화한다.
3. 읽어올때 필요한 stream 준비
4. read 와 print
5. 자원을 닫는다(close)

- File Input Stream을 이용하여 이미지 파일을 읽고 outputstream을 통해서 다른파일로 만들자
1. 읽어올 파일 위치와 내보낼 파일 위치를 설정
2. 읽어오고 내보낼 스트림 준비
3. 스트림 읽기(stream)
4. 읽은 내용을 내보낸다(write)
5. 자원을 닫는다.

* File reader & writer
- reader와 writer는 character 특화.
- 일반 txt 문서는 이것을 사용하는 것이 편리

* 보조스트림
- 다른 스트림과 연결되어 추가 기능을 제공해주는 스크림
- 계속해서 붙일 수 있음

1) 문자기반 보조 스트림
- Input Stream Reader 는 바이트 기반 스트림을 읽는 이다.
- Output Stream Writer 는 바이트 기반 스트림을 쓰는 것이다.
2) 성능향상 보조스트림 : Buffer -> 전송받은 내용들을 모아서 한꺼번에 전송해주는 임시저장소.
3) 기본타입 입출력 보조 스트림
- 바이트 스트림은 기본타입데이터를 전송할 수가 없어서 -> Datainputstream/Dataoutputstream
이용

* input 
1. 가져올 파일 위치 설정
2. inputstream 준비
3. 보조버퍼추가(data, buffer)
4. 데이터 읽고 출력
5. 사용한 자원 닫기

* output
1. 내보낼 파일 위치 설정
2. outputstream 준비
3.보조버퍼추가(data, buffer)
4. 데이터 쓰기
5. 비우기**
6. 사용한 자원 닫기

* Data로 모든 type을 보낼 수 없어 최상위 객체인 object를 다룰 보조스트림이 있다.
-> 그래서 객체, 배열, 컬렉션 등 다양한 데이터 형태가 들어갈 수 있음.
- class 객체의 경우 직렬화 하지 않으면 전달 되지 않는다.

* properties
- map interface를 상속받은 자료구조.

 

 

728x90