용어

-스트림 : 일반적으로 데이터, 패킷 등의 일련의 연속성을 갖는 흐름을 의미한다.

(흐르는 데이터 - 물의 흐름)

 

-입.출력 스트림 : 데이터를 읽고 쓰는 구조를 프로그램의 구조로 모델링 해놓은 것.

 

-버퍼 : 데이터를 임시적으로 담아두는 공간

 

자바의 입출력 스트림 개념

:단 방향으로 흐르며(진행되며) 버퍼를 가질 수 있다. 자바의 입출력 스트림은 FIFO(First In First Out)의 구조를 갖는다.

또 문자(Character Stream) , 바이트(Byte Stream)으로 분류한다.

 

 

문자(Character Stream)문자 최상위 스트림

 

-Reader Class(입력 스트림)

:문자 데이터를 읽어 들이는 스트림.

 

-Writer Class(출력 스트림)

:문자 데이터를 출력하기 위한 스트림.

 

바이트(Byte Stream)바이트 최상위 스트림

 

-InputStream Class(입력 스트림)

:바이트 데이터를 읽어 들이는 스트림.

 

-OutputStream Class(출력스트림)

:바이트 데이터를 출력하기 위한 스트림.

 


 

package io;

import java.io.IOException;

public class IOEx2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int b = 0 , count = 0;
		try {
			b = System.in.read();
			//Ctrl + z 가 아니면 무한 반복
			//문자 하나를 연속적으로 입력받는다.
			while(b != -1) {
				System.out.print((char)b);
				b = System.in.read();
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
		//문자를 입력받아 문자열로 (여러 문자를 입력 받을 수 있도록)흉내
		System.out.println("\n byte InputStream Test.... total byte : "  + count);
	}
}

 

이 코드는 InputStream 클래스의 read()메소드를 이용해서 문자 하나하나를 연속적으로 입력 받아 마치 문자열로 받는 것처럼 흉내내는 코드이다. 

 

Apple을 입력하면 내가 입력한 문자 : A부터 내가 입력한 문자 : e 까지 반복해서 출력한다.

 

 

 

 

 

 

 

 


 

package io;

import java.io.IOException;

//배열을 문자열로 읽기
public class IOEx3 {

	public static void main(String[] args) {
		byte b[] = new byte[20]; //문자 담을 배열 공간 확보(버퍼처럼 활용)
		System.out.print("입력 : ");
		char c = ' ';
		try {
			//0번부터 5까지 입력받아라
			System.in.read(b, 0 ,5);
		}catch(IOException e) {
			e.printStackTrace();
		}
		System.out.print("출력: ");
		//0번부터 5까지 출력해라
		System.out.write(b, 0, 5);
		System.out.println();
 	}

}

 

 

다음은 배열을 문자열로 읽는 코드이다.  크기 20만큼 byte라는 이름을 갖는 배열을 선언하여 이 배열을 버퍼처럼 활용하면서 문자열을 입력받아 출력한다. 자바 docs 도움말을 보면 input stream에서 최대 bytes의 길이만큼 데이터를 읽을 수 있다고 나와있다. 

System.in.read(b,0, 5)는 배열 b를 인덱스 0 부터 5까지 입력 받으라는 뜻이고

System.out.write(b, 0 ,5)도 마찬가지로 

배열 b를 0부터 5까지 출력하란 뜻이 된다. 

Hello World!를 입력하게 되면 배열 b에는 Hello만 저장되게 되고 출력하면 Hello가 출력되는 것을 확인할 수 있다.

 

+ Recent posts