Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

Formoat's Open Blog

IO 패키지 입출력 (Input & Output Stream) 본문

Java/Java Basic

IO 패키지 입출력 (Input & Output Stream)

snd-snd 2019. 9. 10. 22:18

java.io 패키지

 

 - 파일이나 통신 등 디지털 정보의 입출력을 처리하는 클래스가 정의되어있는 패키지

 - 바이트 기반, 문자 기반 스트림으로 나누어 지며, 바이트 기반 스트림은 멀티미디어, 문자 등 

모든 종류의 데이터를 주고 받을 수 있으나, 문자 기반 스트림은 문자만 주고 받을 수 있다.

 

 

Major Class Remarks
File 파일 시스템의 파일 정보를 얻기 위한 클래스
Console 콘솔로부터 문자를 입출력하기 위한 클래스
InputStream / OutputStream 바이트 단위 입출력을 위한 최상위 입출력 스트림 추상 클래스

FileInputStream / FileOutputStream

DataInputStream / DataOutputStream

ObjectInputStream / ObjectOutputStream

PrintStream

BufferedInputStream / BufferedOutputStream

바이트 단위 입출력을 위한 하위 스트림 클래스
Reader / Writer 문자 단위 입출력을 위한 최상위 입출력 스트림 추상 클래스

FileReader / FileWriter

InputStreamReader / OutputStreamWriter

PrintWriter

BufferedReader / BufferedWriter

문자 단위 입출력을 위한 하위 스트림 클래스

<표> java.io 패키지의 주요 클래스

 

 

 

< 입출력 스트림 개념도 > 이미지 출처: 이것이 자바다

 

 

바에서 데이터는 스트림을 통해 입출력을 한다. 스트림은 단방향 통신을 하며 출발지에서 나와 도착지로 이동한다.

 

프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정되는데, 프로그램이 데이터를 입력받을 때에는 입력스트림을 통해 받고, 입력스트림의 출발지는 키보드, 파일, 또 다른 프로그램이 될 수 있다. 데이터를 출력할 경우 출력 스트림을 통해 출력하며, 출력 스트림의 도착지는 모니터, 파일, 또 다른 프로그램이 될 수 있다.

 

프로그램간의 입출력이 이루어질 경우 프로그램 자기 자신을 기준으로 데이터가 들어올 경우 입력 스트림. 반대로 데이터가 나갈 경우 출력 스트림이라고 보면 된다. 스트림은 단방향 통신을 하기 때문에 각각 프로그램별로 별도의 입출력 스트림이 필요하다.

 

 

1. InputStream

 바이트 기반 입력 스트림의 최상위 클래스로 추상 클래스이다. 모든 바이트 기반의 입력 스트림은 InputStream을 상속 받는다.

 

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

<표> InputStream의 주요 메소드

 

 

2. OutputStream

 바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스이다. 모든 바이트 기반의 출력 스트림은 OutputStream을 상속 받는다.

 

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() 사용한 시스템의 자원을 반납하고 출력 스트림을 닫는다.

<표> OutputStream의 주요 메소드

 

 

3. Reader

 문자 기반 입력 스트림의 최상위 클래스로 추상 클래스이다.

 

4. Writer

 문자 기반 출력 스트림의 최상위 클래스로 추상 클래스이다. 

 

 

주요 메소드의 경우 매개값의 타입이 byte → char로 변하는 것외에 다른것은 없다.

 

 

IOStreamExample1.java

public class IOStreamExample1 {

	public static void main(String[] args) throws Exception {
		
		//현재 디스크에 존재하는 복사할 파일의 경로
		InputStream is = new FileInputStream("d:/stream/test.png");
        
		//복사된 파일을 저장할 경로
		OutputStream os = new FileOutputStream("d:/stream/test2.png");
		
		int readByte;
		byte[] b = new byte[100];
		
		//입력 스트림으로부터 1바이트를 읽어 변수에 저장
		while( (readByte = is.read()) != -1 ) {
			os.write(readByte); //읽어드린 1바이트를 출력스트림으로 보냄
		}		

		//입력 스트림으로부터 바이트 배열길이 만큼의 배열을 읽어 바이트배열 변수에 저장
		while( (readByte = is.read(b)) != -1 ) {
			os.write(b); //읽어드린 바이트배열을 출력스트림으로 보냄
		}
		
		//입력 스트림으로부터 바이트 지정한 인덱스부터 지정한 길이만큼의 바이트 배열을 저장
		while( (readByte = is.read(b, 0, 20)) != -1 ) {
			os.write(b, 0, 20); //바이트배열의 지정 인덱스부터 길이만큼을 출력스트림으로 보냄
		}
			
		is.close();
		os.flush();
		os.close();
	}
}

 

// 실행결과

 

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

Java API Document  (0) 2019.09.04
제네릭 (Generic)  (0) 2019.09.04
스트림 최종 처리  (0) 2019.09.04
스트림 중간 처리  (0) 2019.09.04
스트림 (Stream)  (0) 2019.09.04
Comments