일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 토비의 스프링 정리
- Stack
- 토비의 스프링
- list
- Kotlin
- redis
- jvm
- Stream
- Collection
- 보조스트림
- 백준
- SpringBoot
- Java
- mysql
- 스트림
- thread
- GC
- MSA
- 자바
- K8s
- JPA
- gradle
- 이스티오
- 자바 ORM 표준 JPA 프로그래밍
- OS
- 쿠버네티스
- IntellJ
- 스프링
- spring
- Real MySQL
- Today
- Total
인생을 코딩하다.
[Java] 보조 스트림 본문
보조스트림
- 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림
- FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스
생성자의 매개 변수로 또 다른 스트림을 가짐
생성자 | 설명 |
protected FilterInputStream(InputStream in) | 생성자의 매개변수로 InputStream을 받는다. |
public FilterOutputStream(OutputStream out) | 생성자의 매개변수로 OutputStream을 받는다. |
데코레이터 패턴 형식이다.
여러가지 보조 스트림 사용하기
Buffered 스트림 : 내부에 8192 바이트 배열을 가지고 있음, 읽거나 쓸 때 속도가 빠름
DataInputStream/DataOutPutStream : 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 기능을 제공하는 스트림
예제
위 예제는 7MB 가까이 되는 'a.zip'을 'copy.zip'로 똑같이 쓰는(복사) 과정에서 걸리는 시간을 구현한 로직이다.
그냥 FileStream만 썼을때와 BufferedStream을 썻을때의 시간차이를 보면 시간차이가 꽤 나는 것을 볼 수 있다. 첫 사진이 8.4초 두 번째 사진이 0.35초 (컴퓨터 사양, 파일 용량에 따라 시간은 다르게 나온다)
읽어들이거나 쓰는 일에 있어 빠른 시간을 요구할 때 BufferedStream이 많이 쓰인다. .
보조스트림은 기반스트림만 감싸는게 아니라 또 다른 보조스트림도 감싼다.
만약에 socket을 이용하여 읽는다고 하였을 때,
Socket socket = new Socket();
BufferedReader isr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
isr.readLine(); // BufferedReader에만 있는 메서드, 딱 한 줄씩만 읽는다
- 소켓에서 바이트단위로 읽는 것을 문자 단위로 읽을 수 있다. 읽을 때, 버퍼링 기능까지 가져올 수 있다.
- 읽을 때, socket.getinputStream한 상태에서 Reader로 감싸서 문자로 읽게하고, 다시 버퍼링으로 해서 더 빠르게 읽을 수 있게
- 이렇게 기능이 계속 추가되고 있는 것이 데코레이터 패턴, 이것을 상속으로 구현하면 엄청 복잡해진다.
.. 작성중
'Java' 카테고리의 다른 글
[Java] 열거형(enum) (0) | 2021.01.05 |
---|---|
[Java] Serializable과 NIO (0) | 2020.11.25 |
문자 단위 입출력 스트림 (0) | 2020.11.24 |
[Java] 바이트 단위 입출력 스트림 (0) | 2020.11.23 |
[Java] 입출력 스트림 (0) | 2020.11.19 |