InputStream and OutputStream

2020. 12. 28. 16:552021/JOB DA STUDY

 

  • InputStream - (InputStreamReader)

InputStream은 'byte 기반의 입력 스트림 최상위 클래스'로 추상 클래스이다.

모든 byte기반의 입력 스트림은 이 클래스를 상속받아 만들어진다.

 

InputStreamReader Object: byte 단위로 읽을 때, JAVA의 Char 와 String 타입의 경우 Characters로 취급이 된다. 즉, Char/String을 저장하려면 char 단위로 읽고 쓰는 Reader 와 Writer를 사용해야한다. 

그래서 byte단위로 데이터를 읽어 char 형태로 변화시켜 연결하는 객체를 InputStream을 상속하여 만들었다.

 

1. FileInputStream

파일의 내용을 읽어오는데 1byte씩 문자를 읽어올 수 있도록 FileInuptStream 클래스 제공

FileInputStream(File file) 주어진 File객체가 가리키는 파일을 Byte Stream으로 읽기위한 FileInputStream 객체 생성
FileInputStream(String name) 주어진 이름으로 가리키는 파일을 바이트 스트림으로 읽기 위한 FileInputStram 객체 생성
FileInputStream fis = new FileInputStream("파일 이름");
data = fis.read();
fis.close();

 

2. FilterInputStream

 

기본적인 InputStream 과 OutputStream 에서 부족한 기능들을 보완하기 위해 기본 Stream에 필터를 적용해 데이터를 모아 어떤 형으로 변환하는 기능을 제공한다.

 

*** FilterInputStream은 생성자가 protected로 선언***

직접 사용 X, 서브 클래스를 생성하여 사용 O

 

-> FilterInputStream 와 그 하위 클래스는 생성시 다른 Stream 객체를 생성인자로 받는다.

[기본 Stream에 특정 기능을 가진 FilterStream(BufferedStream/DataStream)을 연결하면 원하는 동작 가능]

 

FilterInputStream(InputStream in) InputStream을 생성인자로 받아 특정 기능 수행하는 FilterInputStream 객체 생성
FilterOutputStream(OutputStream out) OutputStream을 생성인자로 받아 특정 기능 수행하는 FilterOutputStream 객체 생성

 

    • BufferedInputStream

1Byte 단위로 입/출력이 이루어지면 기계적인 동작이 많아져서 효율은 떨어지게된다.

 또한 사용자가 일일 버퍼와 크기를 지정하여 입출력을 하게되는 것도 정적이고 불편하다.

그런 의미에서 편리하고 효율적인 입출력으로 성능의 저하를 최소화한다.

 

How?

1. BufferedInputStream을 통해 원하는 자료를 1byte단위로 읽는 read() 메소드를 수행하면 시스템 내부적으로 버퍼를 준비한다.

2. 이 버퍼를 이용해 지정된 파일로부터 버퍼의 크기만큼 한번에 많은 데이터를 가져오면 이렇게 채워진 버퍼로부터 1byte씩 읽어들여 프로그램으로 전달하게 된다.

 

 즉, 버퍼의 크기만큼 한번에 데이터를 가져옴 -> 이 버퍼에서 1byte씩 읽음

 

  • DataInputStream

FilterInputStream을 상속하고 있어 객체 InputStream을 매개변수 인자로 가진다.

DataInputStream을 입출력 장치를 대상으로 하는 입출력 클래스를 같이 사용하면 자바의 기본 자료형(byte 이외에 char, int, long, ...) 데이터를 파일 장치로 직접 입출력 가능

'2021 > JOB DA STUDY' 카테고리의 다른 글

디자인패턴_MVC Pattern  (0) 2020.12.31
NoClassDefFoundError 와 ClassNotFoundException  (0) 2020.12.29
3주차 과제: 연산자  (0) 2020.12.27
MD5 암호화  (0) 2020.12.23
Public과 Private  (0) 2020.12.22