인생을 코딩하다.

[Java] 보조 스트림 본문

Java

[Java] 보조 스트림

Hyung1 2020. 11. 24. 23:31
728x90
반응형

보조스트림

- 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림

- FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스

 

생성자의 매개 변수로 또 다른 스트림을 가짐

생성자 설명
protected FilterInputStream(InputStream in) 생성자의 매개변수로 InputStream을 받는다.
public FilterOutputStream(OutputStream out) 생성자의 매개변수로 OutputStream을 받는다.

데코레이터 패턴 형식이다.

 

여러가지 보조 스트림 사용하기

Buffered 스트림 : 내부에 8192 바이트 배열을 가지고 있음, 읽거나 쓸 때 속도가 빠름

DataInputStream/DataOutPutStream : 자료가 저장된 상태 그대로 자료형을 유지하며 읽거나 쓰는 기능을 제공하는 스트림

 

예제

FileStream
BufferedStream

위 예제는 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로 감싸서 문자로 읽게하고, 다시 버퍼링으로 해서 더 빠르게 읽을 수 있게
- 이렇게 기능이 계속 추가되고 있는 것이 데코레이터 패턴, 이것을 상속으로 구현하면 엄청 복잡해진다.

 

.. 작성중

 

입출력 스트림

 

입출력 스트림

입출력 스트림이란? 네트워크에서 자료의 흐름이 물과 같다는 의미에서 유래 다양한 입출력 장치에 독립적으로 일관성 있는 입출력 방식제공 입출력이 구현되는 곳에서는 모두 I/O 스트림을 사

junghyungil.tistory.com

바이트 단위 입출력 스트림

 

바이트 단위 입출력 스트림

바이트 단위 스트림 InputStream : 바이트 단위 입력 스트림 최상위 클래스 OutPutStream : 바이트 단위 출력 스트림 최상위 클래스 추상 메서드를 포함한 추상 클래스로 하위 클래스가 구현하여 사용

junghyungil.tistory.com

문자 단위 입출력 스트림

 

문자 단위 입출력 스트림

문자 단위 스트림 Reader : 문자 단위로 읽는 최상위 스트림 Writer : 문자 단위로 쓰는 최상위 스트림 추상 메서드를 포함한 추상 클래스로 하위 클래스가 상속받아 구현 하위클래스 스트림 클래스

junghyungil.tistory.com

보조스트림

 

보조 스트림

보조스트림 - 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림 - FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스 생성자의 매개 변수로 또 다른 스트림을 가짐 생성자

junghyungil.tistory.com

 

 

 

728x90
반응형

'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
Comments