java.lang.Object | |||
↳ | java.io.InputStream | ||
↳ | java.io.FilterInputStream | ||
↳ | java.io.PushbackInputStream |
Wraps an existing
InputStream
and adds functionality to "push back"
bytes that have been read, so that they can be read again. Parsers may find
this useful. The number of bytes which may be pushed back can be specified
during construction. If the buffer of pushed back bytes is empty, bytes are
read from the underlying input stream.
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
buf | The buffer that contains pushed-back bytes. | |||||||||
|
pos |
The current position within
buf
.
|
[Expand]
Inherited Fields
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.io.FilterInputStream
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Constructs a new
PushbackInputStream
with the specified input
stream as source.
|
||||||||||
|
Constructs a new
PushbackInputStream
with
in
as source
input stream.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Returns an estimated number of bytes that can be read or skipped without blocking for more
input.
|
||||||||||
|
Closes this stream.
|
||||||||||
|
Marks the current position in this stream.
|
||||||||||
|
Indicates whether this stream supports the
mark(int)
and
reset()
methods.
|
||||||||||
|
Reads a single byte from this stream and returns it as an integer in the
range from 0 to 255.
|
||||||||||
|
Reads up to
byteCount
bytes from this stream and stores them in
the byte array
buffer
starting at
byteOffset
.
|
||||||||||
|
Resets this stream to the last marked position.
|
||||||||||
|
Skips
byteCount
bytes in this stream.
|
||||||||||
|
Pushes a subset of the bytes in
buffer
back to this stream.
|
||||||||||
|
Pushes all the bytes in
buffer
back to this stream.
|
||||||||||
|
Pushes the specified byte
oneByte
back to this stream.
|
[Expand]
Inherited Methods
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.io.FilterInputStream
|
|||||||||||
From class
java.io.InputStream
|
|||||||||||
From class
java.lang.Object
|
|||||||||||
From interface
java.io.Closeable
|
|||||||||||
From interface
java.lang.AutoCloseable
|
The current position within
buf
. A value equal to
buf.length
indicates that no bytes are available. A value of 0
indicates that the buffer is full.
Constructs a new
PushbackInputStream
with the specified input
stream as source. The size of the pushback buffer is set to the default
value of 1 byte.
Warning:
passing a null source creates an invalid
PushbackInputStream
. All read operations on such a stream will
fail.
in | the source input stream. |
---|
Constructs a new
PushbackInputStream
with
in
as source
input stream. The size of the pushback buffer is set to
size
.
Warning:
passing a null source creates an invalid
PushbackInputStream
. All read operations on such a stream will
fail.
in | the source input stream. |
---|---|
size | the size of the pushback buffer. |
IllegalArgumentException |
if
size
is negative.
|
---|
Returns an estimated number of bytes that can be read or skipped without blocking for more input.
Note that this method provides such a weak guarantee that it is not very useful in practice.
Firstly, the guarantee is "without blocking for more input" rather than "without blocking": a read may still block waiting for I/O to complete — the guarantee is merely that it won't have to wait indefinitely for data to be written. The result of this method should not be used as a license to do I/O on a thread that shouldn't be blocked.
Secondly, the result is a conservative estimate and may be significantly smaller than the actual number of bytes available. In particular, an implementation that always returns 0 would be correct. In general, callers should only use this method if they'd be satisfied with treating the result as a boolean yes or no answer to the question "is there definitely data ready?".
Thirdly, the fact that a given number of bytes is "available" does not guarantee that a read or skip will actually read or skip that many bytes: they may read or skip fewer.
It is particularly important to realize that you
must not
use this method to
size a container and assume that you can read the entirety of the stream without needing
to resize the container. Such callers should probably write everything they read to a
ByteArrayOutputStream
and convert that to a byte array. Alternatively, if you're
reading from a file,
length()
returns the current length of the file (though
assuming the file's length can't change may be incorrect, reading a file is inherently
racy).
The default implementation of this method in
InputStream
always returns 0.
Subclasses should override this method if they are able to indicate the number of bytes
available.
IOException |
---|
Closes this stream. This implementation closes the source stream and releases the pushback buffer.
IOException | if an error occurs while closing this stream. |
---|
Marks the current position in this stream. Setting a mark is not supported in this class; this implementation does nothing.
readlimit | the number of bytes that can be read from this stream before the mark is invalidated; this parameter is ignored. |
---|
Reads a single byte from this stream and returns it as an integer in the range from 0 to 255. If the pushback buffer does not contain any available bytes then a byte from the source input stream is returned. Blocks until one byte has been read, the end of the source stream is detected or an exception is thrown.
IOException | if this stream is closed or an I/O error occurs while reading from this stream. |
---|
Reads up to
byteCount
bytes from this stream and stores them in
the byte array
buffer
starting at
byteOffset
. Bytes are read
from the pushback buffer first, then from the source stream if more bytes
are required. Blocks until
byteCount
bytes have been read, the end of
the source stream is detected or an exception is thrown. Returns the number of bytes read,
or -1 if the end of the source stream has been reached.
IndexOutOfBoundsException |
if
byteOffset < 0 || byteCount < 0 || byteOffset + byteCount > buffer.length
.
|
---|---|
IOException | if this stream is closed or another I/O error occurs while reading from this stream. |
NullPointerException |
if
buffer == null
.
|
Resets this stream to the last marked position. Resetting the stream is
not supported in this class; this implementation always throws an
IOException
.
IOException | if this method is called. |
---|
Skips
byteCount
bytes in this stream. This implementation skips bytes
in the pushback buffer first and then in the source stream if necessary.
IOException | if this stream is closed or another I/O error occurs. |
---|
Pushes a subset of the bytes in
buffer
back to this stream. The
subset is defined by the start position
offset
within
buffer
and the number of bytes specified by
length
. The
bytes are pushed back in such a way that the next byte read from this
stream is
buffer[offset]
, then
buffer[1]
and so on.
If this stream's internal pushback buffer cannot store the selected
subset of
buffer
, an
IOException
is thrown. Parts of
buffer
may have already been copied to the pushback buffer when
the exception is thrown.
buffer | the buffer containing the bytes to push back to this stream. |
---|---|
offset |
the index of the first byte in
buffer
to push back.
|
length | the number of bytes to push back. |
IndexOutOfBoundsException |
if
offset < 0
or
length < 0
, or if
offset + length
is greater than the length of
buffer
.
|
---|---|
IOException |
if the free space in the internal pushback buffer is not
sufficient to store the selected contents of
buffer
.
|
Pushes all the bytes in
buffer
back to this stream. The bytes are
pushed back in such a way that the next byte read from this stream is
buffer[0], then buffer[1] and so on.
If this stream's internal pushback buffer cannot store the entire
contents of
buffer
, an
IOException
is thrown. Parts of
buffer
may have already been copied to the pushback buffer when
the exception is thrown.
buffer | the buffer containing the bytes to push back to this stream. |
---|
IOException |
if the free space in the internal pushback buffer is not
sufficient to store the contents of
buffer
.
|
---|
Pushes the specified byte
oneByte
back to this stream. Only the
least significant byte of the integer
oneByte
is pushed back.
This is done in such a way that the next byte read from this stream is
(byte) oneByte
.
If this stream's internal pushback buffer cannot store the byte, an
IOException
is thrown.
oneByte | the byte to push back to this stream. |
---|
IOException | if this stream is closed or the internal pushback buffer is full. |
---|