항해99/언어 스터디 [혼공자]

스터디 18일차 14-1입출력 스트림

숲별 2022. 10. 21. 12:14
728x90

자바에서 데이터는 스트림을 통해 입출력

 

스트림 (stream): 단일 방향으로 연속적으로 흘러가는 것.

                           데이터는 출발지에서 도착지로 흐름.

 

프로그램이 도착지면 입력 스트림

                   출발지면 출력 스트림

 

<입출력스트림의 종류>

  • 바이트(byte)기반 스트림 : 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력시 사용
    • 입력 : InputStream(최상위 클래스, 추상)
    • 출력 : OutStream(최상위 클래스, 추상)
  • 문자(character)기반 스트림 : 문자 데이터를 읽고 출력할 때 사용
    • 입력 : Reader(최상위 클래스, 추상)
    • 출력 : Writer(최상위 클래스, 추상)

 

<바이트 기반 스트림의 주요 메소드>

- InputStream

(하위 클래스 : FileInputStream, BufferedInputStream, DataInputStream)

  • read() 메소드 : 1byte를 읽고 int(4byte) 타입으로 리턴, 끝 1byte에만 데이터 지님.
  • read(byte[ ] b) 메소드 : 매개값으로 주어진 배열의 길이만큼 바이트를 읽고 해당 배열에 저장, 읽은 바이트 수 리턴.
                                         많은 양의 바이트를 읽을 때 사용하면 좋음. read()보다 읽는 횟수 현저히 ↓
  • read(byte[ ] b, int off, int len) 메소드 : len개의 바이트를 읽고 매개값으로 주어진 배열에서 b[off]부터 len개까지 저장
                                                               그리고 읽은 바이트 수 리턴.
                      read(byte[ ] b)와 차이점 1) 한 번에 읽어들이는 바이트 수를 len으로 조절 가능
                                                             2) 배열에서 저장이 시작되는 인덱스 지정 가능 
  • close() : 입력 스트림을 닫음.

 - OutputStream

(하위 클래스 : FileOutputStream, PrintStream, BufferedOutputStream, DataOutputStream)

  • write(int b) 메소드 : 매개 변수로 주어진 int(4byte)의 끝 1byte만 출력
  • write(byte[ ] b) 메소드 : 매개값으로 주어진 배열b의 모든 바이트를 출력
  • write(byte[ ] b, int off, int len) 메소드 : 매개값으로 주어진 배열b[off]부터 len개까지의 바이트를 출력
  • flush() : 내부 버퍼에 잔류된 바이트를 모두 출력
                 (출력스트림은 출력할 바이트를 바로 보내지x, 내부 버퍼(저장소에 우선 저장하기 때문)
  • close() : 출력 스트림을 닫음.

 

<문자 기반 스트림의 주요 메소드>

- Reader

(하위 클래스 : FileReader, BufferedReader, InputStreamReader)

  • read() 메소드 : 1개의 문자(2byte)를 읽고 int(4byte)타입으로 리턴
                            4byte 중 끝 2byte에 문자데이터 존재
  • read(char[ ] cbuf) 메소드 : 매개값으로 주어진 문자 배열의 길이만큼 문자 읽고 배열에 저장
                                              그리고 읽은 문자 수를 리턴
                                               많은 양의 문자 읽을 때 사용하면 좋음. 읽는 횟수 현저히 ↓
  • read(char[ ] cbuf, int off, int len) 메소드 : len개의 문자 만큼 읽고 매개값으로 주어진 문자 배열에서
                                                                     cbuf[off]부터 len개까지 저장. 읽은 문자 수 리턴
  • close()

 - Writer

(하위 클래스 : FileWriter, BufferedWriter, PrintWriter, OutputStreamWriter)

  • write(int c) 메소드 : 매개 변수로 주어진 int(4byte)의 끝 2byte(1개 문자)만 출력
  • write(char[ ] cbuf) 메소드 : 매개값으로 주어진 char[ ] 배열의 모든 문자를 출력
  • write(char[ ] cbuf, int off, int len) 메소드 : c[off]부터 lent개의 문자를 출력
  • write(String str) : 매개값으로 주어진 문자열을 출력
  • write(String str, int off, int len) 메소드 : 주어진 문자열 off순번부터 len개까지의 문자 출력
  • flush()
  • close()

 

 

 

 

 

<확인문제>

1. 입출력 스트림에 대한 설명입니다. 맞는 것에 O표, 틀린 것에 X표 하세요.

   ①하나의 스트림으로 입력과 출력이 동시에 가능하다.(  )

   ②프로그램을 기준으로 데이터가 들어오면 입력 스트림이다.(  )

   ③프로그램을 기준으로 데이터가 나가면 출력 스트림이다.(  )

   ④파일에 데이터를 저장하려면 출력 스트림을 사용해야 한다.(  )

   

2. InputStream과 Reader에 대한 설명입니다. 맞는 것에 O표, 틀린 것에 X표 하세요.

   ①이미지 데이터는 InputStream 또는 Reader로 모두 읽을 수 있다.(  )

   ②Reader의 read() 메소드는 1문자를 읽고 리턴한다.(  )

   ③InputStream의 read() 메소드는 1byte를 읽고 리턴한다.(  )

   ④InputStream의 read(byte[] b) 메소드는 읽은 바이트 수를 리턴한다.(  )

   

3. InputStream의 read(byte[] b, int off, int len) 메소드에 대한 설명입니다.

   맞는 것에 O표, 틀린 것에 X표 하세요.

   ①메소드의 리턴값은 읽은 바이트 수이다.(  )

   ②첫 번째 매개값 b에는 읽은 데이터가 저장된다.(  )

   ③두 번째 매개값 off는 첫 번째 매개값b에서 데이터가 저장될 시작 인덱스이다.(  )

   ④세 번째 매개값 len은 첫 번째 매개값b에서 데이터가 저장될 마지막 인덱스이다.(  )

   

4. 출력 스트림에서 데이터를 출력한 후 flush() 메소드를 호출하는 이유가 무엇입니까?

   ①출력 스트림의 버퍼에 있는 데이터를 모두 출력하고 버퍼를 비운다.

   ②출력 스트림을 메모리에서 제거한다.

   ③출력 스트림의 버퍼에 있는 데이터를 모두 삭제한다.

   ④출력 스트림을 닫는 역할을 한다.