2013년 8월 1일 목요일

자바 InputStream (JAVA InputStream)

InputStream 클래스는 모든 파일 시스템으로부터 스트림의 한 바이트를 읽는다  

  int available(): 스레드가 대기하고 있는 상태에서 사용할 수 있는 바이트 반환, 실행을 중단하지 않고 입력 스트림에서 읽을 수  있는 바이트의 수를 리턴합니다. InputStream의 available 메소드는 0을 리턴합니다. 이 메소드는 서브클래스로 대체(override)되어야 합니다. 
  void close(): 입력 스트림을 닫는다.
  synchronized void mark(int i): 입력 스트림 상의 위치를 표시한다.
  public abstract int read(): 한 문자를 읽고 반환. 이때 스트림 끝은 -1
  int read(byte b[]): 바이트 배열을 읽는다.
  int read(byte b[], int off, int len): 배열 b의 off 위치에서 len 바이트 읽는다.
  sychronized void reset(): 마지막 표시를 반환하고, 계속 read()로 바이트를  읽을 수 있다.(mark 위치로 돌아감)
  void long skip(long i): 입력 스트림에서 n 바이트를 건너뛴다.
  public boolean markSupported() : 입력 스트림이 mark 및 reset 메소드를 지원하는지 여부를 테스트합니다
  System.in.read()는 표준 입출력 스트림으로부터 요구된 자료가 주어질 때까지 실행을 대기하고 있다가 리턴키가 전송될 때 비로소 진행한다. 읽는 단위는 ASCII의 8비트 문자단위이다.


// 읽은 문자를 정수(int)로 취급하는 경우
import java.io.*;
public class TestFile{
  public static void main (String args[]) throws IOException {
    StringBuffer buf=new StringBuffer();   
    int i; 
    while ((i=System.in.read())!=-1)// -1은 eof에 해당하는 코드
        buf.append((char)i); // ctrl+z은 -1에 해당한다.
    System.out.println();
    System.out.print(buf.toString());//StringBuffer를 string으로 변환
  }
}




//system.in.read()를 char로 형변환
import java.io.*;
public class TestFile1{
  public static void main (String args[]) throws IOException {
    StringBuffer buf=new StringBuffer(); 
    char c;
    while ((c=(char)System.in.read())!='\n')
        buf.append(c);
    // 여기서는 ctrl+z이 필요없다. 왜냐면 문자로 읽기 때문이다.
    System.out.print(buf.toString()); //StringBuffer를 string으로 변환
  }
}


------------------------------
BufferedInputStream –  예제
------------------------------
import java.io.*;
public class BufferedStatement {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(args[0]);
BufferedInputStream bis = new BufferedInputStream(fis);
System.out.println("Stream 되돌리기 기능......"+bis.markSupported());
bis.mark(1024); //마킹을 해둔곳으로부터 1024 Byte 읽기전까지는 마킹이 유효
for(int i=0;i<10;i++) {
System.out.write(bis.read());
}
bis.reset();
System.out.println("\n reset() 호출");
for(int i=0; i< 20; i++) {
System.out.write(bis.read());
}
}
}


댓글 없음:

댓글 쓰기