A FilterInputStream contains
some other input stream, which it uses as
its basic source of data, possibly transforming
the data along the way or providing additional
functionality. The class FilterInputStream
itself simply overrides all methods of
InputStream with versions that
pass all requests to the contained input
stream. Subclasses of FilterInputStream
may further override some of these methods
and may also provide additional methods
and fields.

Method Detail

read

Reads the next byte of data from this input stream. The value
byte is returned as an int in the range
0 to 255. If no byte is available
because the end of the stream has been reached, the value
-1 is returned. This method blocks until input data
is available, the end of the stream is detected, or an exception
is thrown.

read

Reads up to byte.length bytes of data from this
input stream into an array of bytes. This method blocks until some
input is available.

This method simply performs the call
read(b, 0, b.length) and returns
the result. It is important that it does
not do in.read(b) instead;
certain subclasses of FilterInputStream
depend on the implementation strategy actually
used.

skip

Skips over and discards n bytes of data from the
input stream. The skip method may, for a variety of
reasons, end up skipping over some smaller number of bytes,
possibly 0. The actual number of bytes skipped is
returned.

available

Returns an estimate of the number of bytes that can be read (or
skipped over) from this input stream without blocking by the next
caller of a method for this input stream. The next caller might be
the same thread or another thread. A single read or skip of this
many bytes will not block, but may read or skip fewer bytes.

reset

Repositions this stream to the position at the time the
mark method was last called on this input stream.

This method
simply performs in.reset().

Stream marks are intended to be used in
situations where you need to read ahead a little to see what's in
the stream. Often this is most easily done by invoking some
general parser. If the stream is of the type handled by the
parse, it just chugs along happily. If the stream is not of
that type, the parser should toss an exception when it fails.
If this happens within readlimit bytes, it allows the outer
code to reset the stream and try another parser.