티스토리 뷰

Java/JAVA

IO(Input/Output) & Stream

Jenny_yoon 2023. 1. 15. 16:50
728x90
반응형
IO(Input/Output)

 

IO 란 자바의 자바의 기본적인 데이터 입출력(Input/Output)을 말한다. API 는 java.io 패키지에서 제공하고 있다. 

해당 패키지에는 다양한 입출력 스트림 클래스를 제공하고 있다.

 

InputStream(입력스트림) & OutputStream(출력스트림)

 

  • InputStream : 프로그램 데이터를 입력 받을 때 (데이터가 들어옴)
    출발지 : 키보드, 파일, 네트워크 상의 프로그램
  • OutputStream : 프로그램이 데이터를 보낼 때 (데이터가 나감)
    출발지 : 모니터, 파일, 네트워크 상의 프로그램

 

java.io 패키지 주요 클래스 설명
File 파일 시스템의 파일 정보를 얻기 위한 클래스
Console 콘솔로부터 문자를 입출력하기 위한 클래스
InputStream / OutputStream 바이트 단위 입출력을 위한 최상위 입출력 스트림 추상 클래스
FileInputStream / FileOutputStream
DataInputStream / DataOutputStream
ObjectInputStream / ObjectOutputStream
PrintStream
BufferedInputStream / BufferedOutputStream
바이트 단위 입출력을 위한 하위 스트림 클래스
Reader / Writer 문자 단위 입출력을 위한 최상위 입출력 스트림 추상 클래스
FileReader / FileWriter
InputStreamReader / OutputStreamWriter
PrintWriter
BufferedReader / BufferedWriter
문자 단위 입출력을 위한 하위 스트림 클래스

 

Stream 클래스

 

  • 바이트 기반 : 그림, 멀티미디어, 문자 등 모든 종류 데이터 주고받기 가능
  • 문자 기반 : 문자만 주고받기 가능
구분 바이트 기반 스트림 문자 기반 스트림
입력 스트림 출력 스트림 입력 스트림 출력 스트림
최상위 클래스 InputStream OutputStream Reader Writer
하위 클래스
(예.파일을 읽고 저장할때)
XXXInputStream
(FileInputStream)
XXXOutputStream
(FileOutputStream)
XXXReader
(FileReader)
XXXWriter
(FileWriter)

 

InputStream 주요 메소드 (Byte 기반 입력 스트림)

 

Return Type Method Remarks
int read() 입력 스트림으로 1바이트를 읽고 읽은 바이트를 반환. 더이상 읽을 수 없을때 -1 반환.
int read(byte[] b) 입력 스트림으로부터 읽은 바이트들을 바이트 배열에 저장하고 읽은 바이트의 수를 반환. 더이상 읽을 수 없을때 -1 반환.
int read(byte[] b,       int off, int len) 입력 스트림으로부터 len개의 바이트만큼 읽고 바이트 배열에 b[off]부터 len개까지의 데이터를 저장하고 읽은 바이트의 수를 반환. 만약 len개의 데이터를 모두 읽지 못하면 실제 읽은 바이트 수를 반환. 더이상 읽을 수 없을때 -1 반환.
void close() 사용한 시스템의 자원을 반납하고 입력 스트림을 닫는다.

 

- read() 

InputStream is = new InputStream("C:/test.jpg");
int readByte;

while( (readByte = is.read()) != -1 ) { 
//is을 읽되, -1이기 전까지만 읽기.
//read()메소드는 InputStream으로 부터 1Byte씩 읽는다. 
//int readByte는 4Byte로 while()을 통해 총 4번 읽을 수 있다는 뜻!
  ...	}

- read(byte[]b)

InputStream is = new InputStream("C:/test.jpg");
int readByteNo;
byte[] readBytes = new byte[100];

while( (readByteNo = is.read(readBytes)) != -1 ) { 
//-1이기 전까지, is를 readBytes크기 만큼만 읽기.
//매개값으로 주어진 바이트 배열 길이 만큼만 읽기때문에 read()처럼 100번 루핑해서 읽을 필요가 없다.
//많은 양의 Byte를 읽을땐 ready(byte[]b)메소드를 사용하기!
  ...	}

- read(byte[]b, int off, int len)

InputStream is = ...;
byte[] readBytes = new byte[100];
int readByteNo = is.read(readBytes, 0, 100);
//len개의 Byte만큼 읽고, 매개값으로 주어진 바이트 배열 b[off]부터 len까지 저장한다. 
//그리고 읽은 Byte 수인 len개를 return 한다.

 

OutputStream 주요 메소드 (Byte 기반 출력 스트림)

 

Return Type Method Remarks
void write(int b) 출력 스트림으로 1바이트를 보낸다
void write(byte[] b) 출력 스트림으로 바이트 배열의 모든 바이트를 보낸다.
void write(byte[] b, int off, int len) 출력 스트림으로 바이트 배열의 b[off]부터 len개까지의 데이터를 보낸다.
void flush() 버퍼에 잔류하는 모든 바이트를 출력한다.
void close() 사용한 시스템의 자원을 반납하고 출력 스트림을 닫는다.

 

 

728x90
반응형

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

보조 스트림  (0) 2023.01.16
File 클래스  (0) 2023.01.15
Garbage Collection (가비지 컬랙션)  (0) 2023.01.11
Queue - FIFO (first in first out)  (0) 2023.01.09
Stack - LIFO(last in first out)  (0) 2023.01.09
댓글
250x250
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday