용어
-스트림 : 일반적으로 데이터, 패킷 등의 일련의 연속성을 갖는 흐름을 의미한다.
(흐르는 데이터 - 물의 흐름)
-입.출력 스트림 : 데이터를 읽고 쓰는 구조를 프로그램의 구조로 모델링 해놓은 것.
-버퍼 : 데이터를 임시적으로 담아두는 공간
자바의 입출력 스트림 개념
:단 방향으로 흐르며(진행되며) 버퍼를 가질 수 있다. 자바의 입출력 스트림은 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가 출력되는 것을 확인할 수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] IO (FileInputStream) (3) (0) | 2020.10.01 |
---|---|
[JAVA] IO(InputStreamReader / BufferedReader) (2) (0) | 2020.10.01 |
[JAVA] Exception - 예외 처리(1) (0) | 2020.09.24 |
[JAVA] Random 클래스 - 가위바위보, 로또 번호 생성기 (0) | 2020.09.24 |
[JAVA] 콜렉션 (Collection / 제네릭(Generic) (0) | 2020.09.22 |