이거 맘대로 되는 세상이 아니구만...

Stream(스트림)1 본문

java

Stream(스트림)1

바이홍 2007. 4. 11. 16:40
반응형
>>>>>>>>>Stream<<<<<<<


▶스크림이란 파일 입출력에서 많이 사용되는 용어이다....

☆스트림의 표준출력
java.lang;
public class System{
public static PrintStream out; //out 콘솔화면에 문자를 출력
public static PrintStream in; //in 키보드의 입력을 받아들이기 위해서 사용하는 표준 입력 스트림
public static PrintStream err; //err 에러메세지의 출력을 위해 사용
........
}

☆스트림의 특징으로는
●FIFO(First in First out)구조를 가지고 있다 즉 먼저 넣은 데이타가 먼저 나온다
●스트림은 단방향이다 즉 양방향으로 사용할 수 없다<읽는 스트림과 쓰는 스트림이 따로 되어 있다>
●스트림은 지연될 수 있다 데이터가 처리되기 전에는 스트림을 사요하는 쓰레드는 지연상태에 있다
●유연한 구조이다 스트림은 다단계로 결합이 가능하다 이 유연성으로 자바의 입출력 프로그램을 작성하기 쉬운 이유이다.
☆스트림에서 생각하자
●스트림에서 다루는 데이터가 무엇인가 (바이트인가 문자인가)
●입출력만 담당하는가 아니면 스트림안에 들어온 데이터를 조작하느냐에 따라 구분

▶입력 스트림 : 프로그램 안으로 데이터를 읽어 들이는 스트림이다.
☆InputStream & Reader
●InputStream클래스는 입력 스트림 클래스들의 최상위 클래스이며, 추상클래스이다.
●대표적인 메서드
abstract int read() : 스트림으로 부터 1byte를 읽는 메서드이다 스트림의 끝을 -1을 반환한다.

int read(byte[] b) : 준비된 바이트 배열에 데이터를 읽어 들이는 메서드이다. 이 메서드는 여러 데이터를 한꺼번에 릭어 들인다
int read(char[] c) 너무 많은 데이터가 들어와 버퍼가 넘치면 IOException 이 발생한다.

long skip(long n) : 이 메서드는 스트림으로부터 읽어들인 데이터를 읽어 들이지 않고 n만큼 건너뛴다.

int available() : 이 메서드는 해당 스트림에서 지연되지 않고 읽어들일 수 있는 바이트의 수를 넘겨준다

void close() : 해당 스트림의 사용이 완료되면 close()를 호출하는 것이 좋다.

●System.in : InputStream 클래스 객체로서 키보드는 일반적으로 사용자의 입력을 받아들이는 표준 입력이다.

▶ InputStream과 대응하는 Reader클래스


클래스 이름 특징 대응 Reader클래스
----------------------------------------------------------------------------------
InputStream 기본 입력 스트림 클래스 Reader
----------------------------------------------------------------------------------
FileInputStream 파일입력 스트림 클래스 FileReader
----------------------------------------------------------------------------------
FilterInputStream 다른필터클래스의 최상위 클래스 FilteredReader
----------------------------------------------------------------------------------
BufferedInputStream 버퍼 기능이 있어 편리 BufferedReader
----------------------------------------------------------------------------------
DataInputStream 자바 기본형 데이터를 읽는데 편리 없음(null)
----------------------------------------------------------------------------------
▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶


import java.io.*;

class Test{
public static void main(String args[]){
Test.streamTest(System.in); //in은 InputStream

}
public static void streamTest(InputStream is){
try{
while(true){ //InputStream에서 한 바이트를 읽음(int형이므로) true를 줘서 무한 반복
int i=is.read();
if(i==-1) break; //스트림의 끝은 -1 Ctrl+Z를 눌리면 끝남 강제종료는 CTRL+C

char c=(char)i;
System.out.print(c);
}
}catch(IOException e){
System.out.println(e);
}
System.out.println();
}
}

----

//위에 로직과 비교해보면 while을 쓰지 않아 여러개의 문자를 넣어도 하나의 바이트만 나오고 종료해버림
import java.io.*;
class Test{
public static void main(String args[]) throws Exception{
InputStream is=System.in;
int i=is.read();
System.out.println((char)i);
}

}



----

//최 상위 로직과 같으나 간단하게 한거 ^^
import java.io.*;
class Test{
public static void main(String args[]) throws Exception{
while(true){
InputStream is=System.in;
int i=is.read();

if(i==-1)break;
System.out.print((char)i);
}
}

}
Comments