Class BufferedInputStream

All Implemented Interfaces:
Closeable, AutoCloseable

public class BufferedInputStream extends FilterInputStream

Reads from another stream through a buffer, so that many small reads become few large ones, and supports mark and reset.

Like most streams, it is for one thread at a time.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected byte[]
    The buffer; null once the stream is closed, which every read checks.
    protected int
    How many bytes of buf are valid.
    protected int
    How far past the mark a read may go before the mark is dropped.
    protected int
    The index in buf of the mark, or -1 when there is none.
    protected int
    The index in buf of the next byte to read.

    Fields inherited from class FilterInputStream

    in
  • Constructor Summary

    Constructors
    Constructor
    Description
    Buffers in with an 8192 byte buffer.
    Buffers in with a buffer of size bytes.
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    Returns 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.
    void
    Closes this input stream and releases any system resources associated with the stream.
    void
    mark(int readlimit)
    Marks the current position in this input stream.
    boolean
    Tests if this input stream supports the mark and reset methods.
    int
    Reads the next byte of data from the input stream.
    int
    read(byte[] b, int off, int len)
    Reads as the JDK does: on past the buffer while the stream underneath has bytes available without blocking, so a small buffer does not make every read a short one.
    void
    Repositions this stream to the position at the time the mark method was last called on this input stream.
    long
    skip(long n)
    Skips over and discards n bytes of data from this input stream.

    Methods inherited from class InputStream

    read, readAllBytes, readNBytes, readNBytes, transferTo

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • buf

      protected byte[] buf
      The buffer; null once the stream is closed, which every read checks.
    • count

      protected int count
      How many bytes of buf are valid.
    • pos

      protected int pos
      The index in buf of the next byte to read.
    • markpos

      protected int markpos
      The index in buf of the mark, or -1 when there is none.
    • marklimit

      protected int marklimit
      How far past the mark a read may go before the mark is dropped.
  • Constructor Details

    • BufferedInputStream

      public BufferedInputStream(InputStream in)
      Buffers in with an 8192 byte buffer.
    • BufferedInputStream

      public BufferedInputStream(InputStream in, int size)

      Buffers in with a buffer of size bytes.

      Throws
      • IllegalArgumentException: when size is not positive
  • Method Details

    • read

      public int read() throws IOException
      Description copied from class: InputStream
      Reads the next byte of data from the 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. A subclass must provide an implementation of this method.
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Reads as the JDK does: on past the buffer while the stream underneath has bytes available without blocking, so a small buffer does not make every read a short one.
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException
    • skip

      public long skip(long n) throws IOException
      Description copied from class: InputStream
      Skips over and discards n bytes of data from this input stream. The skip method may, for a variety of reasons, end up skipping over some smaller number of bytes, possibly 0. This may result from any of a number of conditions; reaching end of file before n bytes have been skipped is only one possibility. The actual number of bytes skipped is returned. If n is negative, no bytes are skipped. The skip method of InputStream creates a byte array and then repeatedly reads into it until n bytes have been read or the end of the stream has been reached. Subclasses are encouraged to provide a more efficient implementation of this method.
      Overrides:
      skip in class FilterInputStream
      Throws:
      IOException
    • available

      public int available() throws IOException
      Description copied from class: InputStream
      Returns 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. The available method for class InputStream always returns 0. This method should be overridden by subclasses.
      Overrides:
      available in class FilterInputStream
      Throws:
      IOException
    • mark

      public void mark(int readlimit)
      Description copied from class: InputStream
      Marks the current position in this input stream. A subsequent call to the reset method repositions this stream at the last marked position so that subsequent reads re-read the same bytes. The readlimit arguments tells this input stream to allow that many bytes to be read before the mark position gets invalidated. The general contract of mark is that, if the method markSupported returns true, the stream somehow remembers all the bytes read after the call to mark and stands ready to supply those same bytes again if and whenever the method reset is called. However, the stream is not required to remember any data at all if more than readlimit bytes are read from the stream before reset is called. The mark method of InputStream does nothing.
      Overrides:
      mark in class FilterInputStream
    • reset

      public void reset() throws IOException
      Description copied from class: InputStream
      Repositions this stream to the position at the time the mark method was last called on this input stream. The general contract of reset is: If the method markSupported returns true, then: If the method mark has not been called since the stream was created, or the number of bytes read from the stream since mark was last called is larger than the argument to mark at that last call, then an IOException might be thrown. If such an IOException is not thrown, then the stream is reset to a state such that all the bytes read since the most recent call to mark (or since the start of the file, if mark has not been called) will be resupplied to subsequent callers of the read method, followed by any bytes that otherwise would have been the next input data as of the time of the call to reset. If the method markSupported returns false, then: The call to reset may throw an IOException. If an IOException is not thrown, then the stream is reset to a fixed state that depends on the particular type of the input stream and how it was created. The bytes that will be supplied to subsequent callers of the read method depend on the particular type of the input stream. The method reset for class InputStream does nothing and always throws an IOException.
      Overrides:
      reset in class FilterInputStream
      Throws:
      IOException
    • close

      public void close() throws IOException
      Description copied from class: InputStream
      Closes this input stream and releases any system resources associated with the stream. The close method of InputStream does nothing.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class FilterInputStream
      Throws:
      IOException
    • markSupported

      public boolean markSupported()
      Description copied from class: InputStream
      Tests if this input stream supports the mark and reset methods. The markSupported method of InputStream returns false.
      Overrides:
      markSupported in class FilterInputStream