BufferedInputStream adds
functionality to another input stream-namely,
the ability to buffer the input and to
support the mark and reset
methods. When the BufferedInputStream
is created, an internal buffer array is
created. As bytes from the stream are read
or skipped, the internal buffer is refilled
as necessary from the contained input stream,
many bytes at a time. The mark
operation remembers a point in the input
stream and the reset operation
causes all the bytes read since the most
recent mark operation to be
reread before new bytes are taken from
the contained input stream.
API Note
Once wrapped in a BufferedInputStream, the underlying
InputStream should not be used directly nor wrapped with
another stream.
| Modifier and Type | Field and Description |
|---|---|
| protected volatile byte[] | buf
The internal buffer array where the data is stored. |
| private static final long | |
| protected int | count
The index one greater than the index of the last valid byte in the buffer. |
| private static final int | |
| private static final byte[] | |
| private final int | |
| protected int | marklimit
The maximum read ahead allowed after a call to the
|
| protected int | markpos
The value of the |
| protected int | pos
The current position in the buffer. |
| private static final Unsafe | U
As this class is used early during bootstrap, it's motivated to use Unsafe.compareAndSetReference instead of AtomicReferenceFieldUpdater (or VarHandles) to reduce dependencies and improve startup time. |
| Access | Constructor and Description |
|---|---|
| public | BufferedInputStream(InputStream
the underlying input stream. in)Creates a |
| public | BufferedInputStream(InputStream
the underlying input stream. in, int the buffer size. size)Creates a |
| Modifier and Type | Method and Description |
|---|---|
| public synchronized int | Returns: an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking.Overrides java. Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. |
| public void | close()
Overrides java. Implements java. Closes this input stream and releases any system resources associated with the stream. |
| private void | |
| private void | fill()
Fills the buffer with more data, taking into account shuffling and other tricks for dealing with marks. |
| private byte[] | getBufIfOpen(boolean
true to allocate if empty allocateIfEmpty)Returns the internal buffer, optionally allocating it if empty. |
| private byte[] | |
| private InputStream | getInIfOpen()
Check to make sure that underlying input stream has not been nulled out due to close; if not return it; |
| private static boolean | Returns: true if this class is trustedReturns true if this class satisfies the following conditions:
|
| public synchronized void | mark(int
the maximum limit of bytes that can be read before
the mark position becomes invalid. readlimit)Overrides java. See the general contract of the |
| public boolean | Returns: aboolean indicating if this stream type supports
the mark and reset methods.Overrides java. Tests if this input stream supports the |
| public synchronized int | Returns: the next byte of data, or-1 if the end of the
stream is reached.Overrides java. See
the general contract of the |
| public synchronized int | Returns: the number of bytes read, or-1 if the end of
the stream has been reached.destination buffer. b, int offset at which to start storing bytes. off, int maximum number of bytes to read. len)Overrides java. Reads bytes from this byte-input stream into the specified byte array, starting at the given offset. |
| private int | read1(byte[] b, int off, int len)
Read bytes into a portion of an array, reading from the underlying stream at most once if necessary. |
| public synchronized void | reset()
Overrides java. See the general contract of the |
| public synchronized long | skip(long n)
Overrides java. See the general contract of the |
| public synchronized long | transferTo(OutputStream out)
Overrides java. Reads all bytes from this input stream and writes the bytes to the given output stream in the order that they are read. |
| buf | back to summary |
|---|---|
| protected volatile byte[] buf The internal buffer array where the data is stored. When necessary, it may be replaced by another array of a different size. | |
| BUF_OFFSET | back to summary |
|---|---|
| private static final long BUF_OFFSET | |
| count | back to summary |
|---|---|
| protected int count The index one greater than the index of the last valid byte in
the buffer.
This value is always
in the range | |
| DEFAULT_BUFFER_SIZE | back to summary |
|---|---|
| private static final int DEFAULT_BUFFER_SIZE | |
| EMPTY | back to summary |
|---|---|
| private static final byte[] EMPTY | |
| initialSize | back to summary |
|---|---|
| private final int initialSize | |
| marklimit | back to summary |
|---|---|
| protected int marklimit The maximum read ahead allowed after a call to the
| |
| markpos | back to summary |
|---|---|
| protected int markpos The value of the
This value is always
in the range | |
| pos | back to summary |
|---|---|
| protected int pos The current position in the buffer. This is the index of the next
byte to be read from the
This value is always in the range
| |
| U | back to summary |
|---|---|
| private static final Unsafe U As this class is used early during bootstrap, it's motivated to use Unsafe.compareAndSetReference instead of AtomicReferenceFieldUpdater (or VarHandles) to reduce dependencies and improve startup time. | |
| BufferedInputStream | back to summary |
|---|---|
| public BufferedInputStream(InputStream in) Creates a
| |
| BufferedInputStream | back to summary |
|---|---|
| public BufferedInputStream(InputStream in, int size) Creates a
| |
| available | back to summary |
|---|---|
| public synchronized int available() throws IOException Overrides java. Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. The next invocation 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.
This method returns the sum of the number of bytes remaining to be read in
the buffer (
| |
| close | back to summary |
|---|---|
| public void close() throws IOException Overrides java. Implements java. Closes this input stream and releases any system resources associated with the stream. Once the stream has been closed, further read(), available(), reset(), or skip() invocations will throw an IOException. Closing a previously closed stream has no effect.
| |
| ensureOpen | back to summary |
|---|---|
| private void ensureOpen() throws IOException Throws IOException if the stream is closed (buf is null). | |
| fill | back to summary |
|---|---|
| private void fill() throws IOException Fills the buffer with more data, taking into account shuffling and other tricks for dealing with marks. Assumes that it is being called by a synchronized method. This method also assumes that all data has already been read in, hence pos > count. | |
| getBufIfOpen | back to summary |
|---|---|
| private byte[] getBufIfOpen(boolean allocateIfEmpty) throws IOException Returns the internal buffer, optionally allocating it if empty.
| |
| getBufIfOpen | back to summary |
|---|---|
| private byte[] getBufIfOpen() throws IOException Returns the internal buffer, allocating it if empty.
| |
| getInIfOpen | back to summary |
|---|---|
| private InputStream getInIfOpen() throws IOException Check to make sure that underlying input stream has not been nulled out due to close; if not return it; | |
| isTrusted | back to summary |
|---|---|
| private static boolean isTrusted(OutputStream os) Returns true if this class satisfies the following conditions:
| |
| mark | back to summary |
|---|---|
| public synchronized void mark(int readlimit) Overrides java. See the general contract of the
| |
| markSupported | back to summary |
|---|---|
| public boolean markSupported() Overrides java. Tests if this input stream supports the
| |
| read | back to summary |
|---|---|
| public synchronized int read() throws IOException Overrides java. See
the general contract of the
| |
| read | back to summary |
|---|---|
| public synchronized int read(byte[] b, int off, int len) throws IOException Overrides java. Reads bytes from this byte-input stream into the specified byte array, starting at the given offset. This method implements the general contract of the corresponding
read on the underlying stream returns
-1 to indicate end-of-file then this method returns
-1. Otherwise, this method returns the number of bytes
actually read.
Subclasses of this class are encouraged, but not required, to attempt to read as many bytes as possible in the same fashion.
| |
| read1 | back to summary |
|---|---|
| private int read1(byte[] b, int off, int len) throws IOException Read bytes into a portion of an array, reading from the underlying stream at most once if necessary. | |
| reset | back to summary |
|---|---|
| public synchronized void reset() throws IOException Overrides java. See the general contract of the
If
| |
| skip | back to summary |
|---|---|
| public synchronized long skip(long n) throws IOException Overrides java. See the general contract of the
| |
| transferTo | back to summary |
|---|---|
| public synchronized long transferTo(OutputStream out) throws IOException Overrides java. Doc from java. Reads all bytes from this input stream and writes the bytes to the given output stream in the order that they are read. On return, this input stream will be at end of stream. This method does not close either stream. This method may block indefinitely reading from the input stream, or writing to the output stream. The behavior for the case where the input and/or output stream is asynchronously closed, or the thread interrupted during the transfer, is highly input and output stream specific, and therefore not specified.
If the total number of bytes transferred is greater than Long#MAX_VALUE, then If an I/O error occurs reading from the input stream or writing to the output stream, then it may do so after some bytes have been read or written. Consequently the input stream may not be at end of stream and one, or both, streams may be in an inconsistent state. It is strongly recommended that both streams be promptly closed if an I/O error occurs.
| |