336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
InputStream은 모든 입력 스트림 서브 클래스들의 슈퍼 클래스이다.
InputStream 메소드들
int available()
read() 메소드를 호출하였을 때 호출한 스레드의 블록 없이 현재 입력 스트립에서 읽어들일 수 있는 바이트의 수를 반환한다.(또는 skip() 메소드가 호출되었을 때 건너뛸 수 있는 바이트 수), 이 메소드는 I/O 에러가 발생하면 IOException을 던진다. 이 메소드를 오버라이드한 서브 클래스에서 스트림의 전체 크기를 반환하지 않을 수도 있으므로 이 메소드의 반환값으로 스트림의 모든 데이터를 저장하는 버퍼를 할당해서는 안된다.
void close()
현재 입력 스트림을 닫고 스트림과 연관되어 있는 시스템 리소스를 해제한다. 이 메소드는 I/O 에러가 발생하면 IOException을 던진다(InputStream에서 Closeable을 구현하기 떄문에 입력 스트림과 함께 try-with-resources 문을 사용할 수 있다)
void mark (int readlimit)
입력 스트림의 현재 위치를 마크(mark)한다. reset() 메소드가 호출되면 마지막에 마크된 위치로 현재 위치가 옮겨지며 이후에 읽기 작업을 수행하면 옮겨진 위치부터 바이트를 읽어들인다. readlimit 인자는 현재 지정한 마크가 무효화되기 전에 읽어들일 바이트의 수가 지정되며 입력 스트림에 통지된다. 지정한 바이트의 개수를 다 읽어들이기 전에 스트림은 마크된 위치를 재설정할 수 없다.
boolean markSupported()
현재 입력 스트림이 mark()와 reset() 메소드를 지원하면 true를 반환하고 아니면 false를 반환한다.
int read()
현재 입력 스트림에서 한 바이트를 읽어 반환한다. 반환되는 값은 0-255 사이이며 스트림의 마지막에서 읽기를 시도하면 -1이 반환된다. 이 메소드는 I/O 에러가 발생 할 경우 IOException을 던진다.
int read(byte[] b)
현재 입력 스트림으로 부터 바이트들을 읽어 배열 인자 b에 저장한다. 반환되는 값은 실제 읽어들인 바이트의 수이다. 만일 스트림의 마지막에 도달했을 경우에는 -1을 반환한다. 읽어들인 바이트 수는 b의 길이보다 작거나 같다. 이 메소드는 인자 b가 null일 떄 NullPointerException 그리고 I/O에러가 발생하면 IOException을 던진다.
int read(byte[] b, int off, int len)
현재 입력 스트림에서 인자 off에 지정한 오프셋 위치에서부터 인자 len로 지정한 값보다 같거나 작은 개수의 바이트를 읽어 인자 배열 b에 저장한다. 실제로 읽어들인 바이트의 개수를 반환하거나 스트림의 끝이면 -1을 반환한다.
이 메소드는 인자 b가 null 이면 NullPointerException을, 인자off 또는 len이 음수이거나 len이 b.length - off 보다 큰 수로 지정이 되면 IndexOutOfBoundsException을 그리고 I/O 에러가 발생하면 IOException을 던진다.
void reset()
마지막으로 mark() 메소드가 호출된 곳으로 위치를 재설정한다. 입력 스트림에 마크된 적이 없거나 마크가 무효화되었을 경우 IOException을 던진다.
long skip(long n)
인자 n에 지정한 바이트 수만큼 입력 스트림을 건너 뛴다. n에 지정한 바이트 수보다 남은 입력 스트림 데이터가 적으면 입력 스트림의 마지막으로 건너뛴다. 실제 건너뛴 바이트의 개수가 반환된다. 인자 n이 음수로 지정이 되면 위치를 이동하지 않는다. 이 메소드는 입력 스트림이 건너띄기를 지원하지 않거나 I/O 에러가 발생하면 IOException을 던진다.
ByteArrayInputStream()과 같은 InputStream()의 서브 클래스들은 mark() 메소드를 통해 현재 읽기 위치를 스트림에 지정할 수 있으며 reset() 메소드를 호출에 마크했던 위치로 돌아가는 기능을 제공한다.
***
현재 사용하고 있는 스트림 서브 클래스가 mark()와 reset() 메소드를 지원하는지 알기 위해서는 markSupported() 메소드를 호출해야 한다는 것을 명심하자