초보 개발자의 기록

입출력(I/O) 본문

JAVA/Basic

입출력(I/O)

bambinodeveloper 2021. 8. 20. 00:17
728x90

입출력?

- 입력 (Input)

- 출력(Output)

- 컴픁 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다

 

스트림(Stream)

- 자바에서 입출력을 수행하려면 (어느 한쪽에서 다른 쪽으로 데이터를 전달하려면) 

  두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것이 스트림

- 데이터를 운반하는데 사용되는 연결통로

- 단방향 통신만 가능 (입력과 출력을 동시에 처리 불가)

- 입력과 출력을 동시에 수행하려면 입력(입력스트림), 출력(출력스트림) 2개의 스트림이 필요

- 먼저 보낸 데이터를 먼저 받게 되어 있어 중간에 건너뜀 없이 연속적으로 데이터 주고 받음 (FIFO)

 

바이트 기반 스트림 - InputStream , OutputStream

- 입출력 대상의 종류

- 입출력의 단위가 1byte

- 스트림을 사용해서 모든 작업을 마치고 난 후에는 close() 를 호출해서 반드시 닫아줘야 함

 * ByteArrayInputStream 고 같이 메모리를 사용하는 스트림, System.in, System.out 같은 표준 입출력 스트림 닫지x

 

1) 파일 - 입력(FileInputStream)  출력(OutputStream)

2) 메모리 - 입력(ByteArrayInputStream) 출력(ByteArrayOutputStream)

 

입출력의 대상에 따라 읽고 쓰는 방법이 다를것이기 때문에 각 상황에 알맞게 구현하라는 의미로 추상메서드로 정의

-InputStream  : abstract int read()

-OutputStream  : abstract void write(int b) 

-read, write 구현되어있지 않으면 다른 입출력 메서드 쓸수없음. 반드시 구현되어야하는 핵심 메서드

 

보조 스트림

- 보조스트림은 실제 데이터를 주고받는 스트림이 아니기 때문에 데이터 입출력할 수 있는 기능은 없지만

  스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있음

- 스트림을 먼저 생성한 후에 이를 이용해서 보조스트림을 생성해야 함

 

문자기반 스트림 - Reader, Writer

- 2byte인 문자를 처리하기 위해 사용

- 문자데이터를 입출력할 떄는 바이트기반 스트림 대신 문자기반 스트림 사용

 

  InuptStream -> Reader

  OutputStream -> Writer

* 예외 > ByteArrayInputStream -> CharArrayReader

            ByteArrayOutputStream -> CharArrayWriter

 

ByteArrayInputStream, ByteArrayOutputStream

- 메모리, 바이트배열에 데이터를 입출력하는데 사용되는 스트림

- 다른 곳에 입출력하기 전에 데이터를 임시로 바이트 배열에 담아서 변환 등의 작업을 하는데 사용

- 바이트배열은 사용하는 자원이 메모리 밖에 없으므로 가비지컬렉터에 의해 자동적으로 자원을 반환하므로 close() x

 

728x90
반응형

'JAVA > Basic' 카테고리의 다른 글

Java Introducion  (0) 2023.04.08
예외처리 (Exception Handling)  (0) 2021.08.19
Class 정의시 주요 구성요소  (0) 2021.08.05
Getter , Setter  (0) 2021.08.05
연산자(Operator)  (0) 2021.08.02