[JAVA] 자바 정복기 - 입출력 스트림

개발log·2024년 4월 11일

NEW 자바 정복기

목록 보기
26/27
post-thumbnail

스트림(Stream)

  • 자바에서 데이터는 스트림을 통해 입출력됨
  • 프로그램이 데이터의 출발지인지 도착지인지의 여부에 따라 사용하는 스트림의 종류가 결정

입출력 스트림의 종류

바이트 기반 스트림

  • 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력

문자 기반 스트림

  • 문자 데이터를 읽고 출력할 때 사용

최상위 클래스가 무엇인지에 따라 바이트 또는 문자 스트림인지 판단



바이트 출력 스트림: OutPutStream

  • 바이트 기반 출력 스트림의 최상위 클래스
  • 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스 상속받음


write(int b) 메소드

  • 매개 변수로 주어지는 int(4byte)에서 끝 1byte만 출력 스트림으로 보냄

write(byte[] b) 메소드

  • 매개값으로 주어진 배열의 모든 바이트를 출력 스트림으로 보냄

write(byte[] b, int off, int len) 메소드

  • 배열 b에서 b[off]에서부터 len개의 바이트만 출력 스트림으로 보냄

바이트 입력 스트림: InputStream

  • 바이트 기반 입력 스트림의 최상위 클래스
  • 모든 바이트 기반 입력 스트림은 InputStream 클래스 상속받아 만들어짐


InputStream

  • 입력 스트림으로부터 1byte 읽고 int(4byte) 타입으로 리턴
  • 리턴된 4byte 중 끝 1byte에만 데이터 들어 있음
  • 더 이상 입력 스트림으로부터 바이트 읽을 수 없게 되면 -1 리턴
    읽을 수 있는 마지막 바이트까지 반복하여 1byte씩 읽을 수 있음

read(byte[]) 메소드

  • 매개값으로 주어진 배열의 길이만큼 입력 스트림으로부터 바이트를 읽고 해당 배열에 저장
  • 읽은 바이트 수를 리턴
InputSteam is = ...;
byte[] readBytes = new byte[100];
int readByteNo = is.read(readBytes);

read(byte[] b, int off, int len) 메소드

  • 입력 스트림으로부터 len 개의 바이트를 읽고 바이트 배열에서 b[off]부터 len개 까지 저장
  • 읽은 바이트 수인 len개 리턴
InputStream is = ...;
byte[] readBytes = new Bytes[100];
int readByteNo = is.read(readBytes, 0, 100);

문자 출력 스트림: Writer

  • 문자 기반 출력 스트림의 최상위 클래스
  • 모든 문자 기반 출력 스트림 클래스는 Writer 클래스를 상속받아 만들어짐


writer(int c) 메소드

  • 매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개 문자)만 출력 스트림을 보냄

write(char[]) 메소드

  • 매개값으로 주어진 char[] 배열의 모든 문자를 출력 스트림으로 보냄

write(char[] cbuf, int off, int len) 메소드

  • c[off]부터 len개의 문자를 출력 스트림으로 보냄

write(String str)와 write(String str, int off, int len) 메소드

  • write(String str)은 문자열 전체를 출력 스트림으로 보냄
  • wirte(String str, int off, int len)은 주어진 문자열 off순번 부터 len 개까지의 문자 보냄

문자열 입력 스트림: Reader

  • 문자 기반 입력 스트림의 최상위 클래스
  • 모든 문자 기반 입력 스트림은 Reader 클래스 상속받아 만들어짐


read() 메소드

  • 입력 스트림으로부터 1개의 문자(2byte) 읽고 int(4byte) 타입으로 리턴
  • 리턴된 4byte 중 끝 2byte에 문자 데이터 들어 있음
  • read() 메소드가 리턴한 int 값 char 타입으로 변환하면 읽은 문자 얻을 수 있음
char charData = (char) read();

read(char[] cbuf) 메소드

  • 매개값으로 주어진 문자 배열의 길이만큼 입력 스트림으로부터 문자를 읽고 배열에 저장
  • 읽은 문자 수를 리턴

read(char[] cbuf, int off, int len) 메소드

  • 입력 스트림으로부터 최대 len개의 문자만큼 읽고 문자열의 cbuf[off]부터 저장
  • 실제로 읽은 문자 수 리턴
Reader reader = ...;
char[] chuf = new char[100];
int readCharNo = reader.read(chuf, 0, 100);

정리

  • 입출력 스트림: 자바에서 데이터는 스트림을 통해 입출력됨. 프로그램이 출발지인지 도착지인지 여부에 따라 사용하는 스트림의 종류가 결정됨
  • InputStream: 바이트 기반 입력 스트림의 최상위 클래스, 추상 클래스, 모든 바이트 기반 입력 스트림은 InputStream 클래스를 상속받아 만들어짐.
  • OutputStream: 바이트 기반 출력 스트림의 최상위 클래스, 추상 클래스, 모든 바이트 기반 출력 스트림 클래스는 OutputStream 클래스 상속받아 만들어짐
  • Reader: 문자 기반 입력 스트림의 최상위 클래스, 추상 클래스, 모든 문자 기반 입력 스트림은 Reader 클래스 상속받아 만들어짐
  • Writer: 문자 기반 출력 스트림의 최상위 클래스, 추상 클래스, 모든 문자 기반 출력 스트림 클래스는 Writer 클래스 상속받아 만들어짐
profile
나의 개발 저장소

0개의 댓글