PushbackInputStream — 바이트를 다시 밀어 넣는 입력 스트림
PushbackInputStream — 바이트를 다시 밀어 넣는 입력 스트림
PushbackInputStream은 입력 스트림에 pushback(밀어 넣기) 기능을 더하는 클래스예요. 읽은 바이트를 스트림에 다시 "밀어 넣어" 다시 읽을 수 있게 해 줍니다. 이 기능은 스트림에서 한 바이트를 "엿보고(peek)" 필요하면 다시 넣어야 하는 파싱 작업에 유용해요.
본문
이 클래스는 java.io.InputStream → java.io.FilterInputStream을 상속하며 Closeable, AutoCloseable을 구현합니다.
필드
protected byte[] buf— 밀어 넣을 바이트가 저장되는 pushback 버퍼예요.protected int pos— 이 pushback 버퍼의 현재 위치예요.buf[0]부터buf[pos-1]까지가 밀어 넣는 바이트이고,[pos]부터[buf.length-1]까지가 미래에 밀어 넣을 바이트가 놓일 공간이에요.
생성자
PushbackInputStream(InputStream in, int size)— 지정한 pushback 버퍼 크기(size)로PushbackInputStream을 만들어요.size <= 0이면IllegalArgumentException을 던져요.PushbackInputStream(InputStream in)— 1바이트 pushback 버퍼로 만들어요.
메서드
int read()— 다음 바이트를 읽어요. pushback 버퍼에 바이트가 있으면 그 바이트를, 아니면 기반 스트림에서 읽어요.int read(byte[] b, int off, int len)— 최대len바이트를 바이트 배열로 읽어요.void unread(int b)— 바이트 하나를 pushback 버퍼에 다시 넣어요.void unread(byte[] b, int off, int len)— 바이트 배열의 일부를 다시 넣어요.void unread(byte[] b)— 바이트 배열 전체를 다시 넣어요.long skip(long n)—n바이트를 건너뛰고 폐기해요.int available()— 블로킹 없이 읽을 수 있는 바이트 수를 반환해요.void mark(int readlimit)— 현재 위치를 표시해요.void reset()— 스트림을 마지막mark시점으로 되돌려요.boolean markSupported()— mark/reset 지원 여부를 테스트해요.void close()— 스트림을 닫고 관련 시스템 자원을 해제해요.
PushbackInputStream은 토큰 파싱 등에서 읽은 데이터를 되돌려야 할 때 사용해요.