Language/JAVA

(JAVA)IO

doheun 2023. 1. 27. 11:36
반응형

IO(Input & Output)

input - 사용자가 프로그램에 데이터 전달하는 것
output - 프로그램이 결과를 내보내는 것

용어

  1. 스트림 : 흐르는 데이터 혹은 파이프의 구조
  2. 입출력 스트림 : 데이터를 읽고 쓰는 구조를 프로그램의 구조로 만들어 놓은 것
  3. 버퍼 : 데이터를 임시적으로 담아두는 공간
  4. 노드 : 데이터와 직접적으로 관여하는 필수적인 부분 (Byte, Char, String, File, Piped, Socket, System in)
  5. 필터 : 사용하면 성능을 향상시킬 수 있지만 없어도 되는 부분(node이외에는 모두 filter)

Stream

자료의 입출력을 도와주는 중간 매개체

입출력 스트림 : Byte단위 전송
입출력 -er(Reader,Writer) : Char단위 전송

  • 연속적인 데이터의 흐름
  • 단위 : Byte
  • 단방향
  • 다른 Stream과 섞이지 않는다

입출력 스트림

  • 단방향
  • FIFO(Fisrt In First Out)구조
  • 데이터조작시 버퍼 사용

InputStream 클래스

  • 추상클래스
  • byte단위 입력

read() : 입력스트림 계열의 멤버 메서드

  • 읽을 대상에 맞게 구현
  • InputStream 추상클래스 내의 추상메서드
  • 반환타입 : int (음수인 경우 읽을 데이터 없는경우)
  • 반환 값
    • read() : 읽은 값
    • read(byte b[]) 읽은 데이터 수

int read() - 데이터를 1byte씩 읽는다
int read(byte b[]) - 데이터를 바이트 배열 길이만큼 읽는다
int read(byte b[], int index, int length) : 바이트 배열에서 위치와 길이를 정해서 데이터를 읽는다

OutputStream 클래스

  • 추상클래스
  • byte단위 출력

write() : 출력 스트림 계열의 멤버 메서드

int write() - 데이터를 1byte씩 출력
int write(byte b[]) - 데이터를 바이트 배열 길이만큼 출력
int write(byte b[], int index, int length) - 바이트 배열에서 위치와 길이를 정해서 데이터 출력

flush()

  • 스트림에 기록된 데이터를 강제로 모두 비움
  • close()시 autoFlush발생

Reader 클래스

  • 추상클래스
  • 문자(char) 단위 입력
  • Reader클래스는 문자열을 읽는 메서드가 없기 때문에 하위클래스의 BufferedReader클래스를 사용

read() : 2byte씩 읽는다

int read() - 데이터를 2byte씩 읽는다
int read(char c[]) - 데이터를 char 배열 길이만큼 읽는다
int read(char c[],int index,int length) - char 배열에서 위치와 길이를 정해서 데이터 출력

Writer 클래스

  • 추상클래스
  • 문자(char) 단위 출력

write() : 2byte씩 출력

int write(int c) - 데이터를 2byte씩 출력
int write(char c[]) - 데이터를 char 배열 길이만큼 출력
int write(char c[],int index,int length) - char배열에 원하는 위치와 길이만큼 데이터출력

입출력 사용시 유의사항

1. 입출력 사용 후 연결종료

예기치 못한 상황들로 인해 처리할 수 없는 경우가 발생 할 수 있기 때문에 IO에서는 무조건 예외처리 하도록 설계하고 작업이 끝나면 연결을 종료 시켜야함

2. 모든 연결은 반드시 close()

파일을 출력하였다고 해도 연결이 종료된 것이 아니기 때문에 메모리 낭비가 발생

3. 연결종료시 close()는 finally에서 처리

try문내에서 close()를 작성하게 되면 예외 발생시 close()가 실행 되지 않기 때문에 예외 발생 여부에 관계없이 종료 될수 있도록 finally에 작성

반응형

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

(JAVA)예외 처리  (0) 2023.01.26
(JAVA)Getter와 Setter  (0) 2023.01.22
(JAVA)인터페이스  (0) 2023.01.20
(JAVA)추상 클래스  (0) 2023.01.19
(JAVA)상속-super, this  (0) 2023.01.19