Class BoundedInputStream.Builder

All Implemented Interfaces:
IOSupplier<BoundedInputStream>
Enclosing class:
BoundedInputStream

public static class BoundedInputStream.Builder extends AbstractStreamBuilder<BoundedInputStream,BoundedInputStream.Builder>
Builds a new BoundedInputStream.

By default, a BoundedInputStream is unbound; so make sure to call BoundedInputStream.AbstractBuilder.setMaxCount(long).

You can find out how many bytes this stream has seen so far by calling BoundedInputStream.getCount(). This value reflects bytes read and skipped.

Using a ServletInputStream

A ServletInputStream can block if you try to read content that isn't there because it doesn't know whether the content hasn't arrived yet or whether the content has finished. Initialize an BoundedInputStream with the Content-Length sent in the ServletInputStream's header, this stop it from blocking, providing it's been sent with a correct content length in the first place.

Using NIO


 BoundedInputStream s = BoundedInputStream.builder()
   .setPath(Paths.get("MyFile.xml"))
   .setMaxCount(1024)
   .setPropagateClose(false)
   .get();
 
 

Using IO


 BoundedInputStream s = BoundedInputStream.builder()
   .setFile(new File("MyFile.xml"))
   .setMaxCount(1024)
   .setPropagateClose(false)
   .get();
 
 

Counting Bytes

You can set the running count when building, which is most useful when starting from another stream:


 InputStream in = ...;
 BoundedInputStream s = BoundedInputStream.builder()
   .setInputStream(in)
   .setCount(12)
   .setMaxCount(1024)
   .setPropagateClose(false)
   .get();
 
 
Since:
2.16.0
See Also:
  • Constructor Details

    • Builder

      public Builder()
  • Method Details

    • get

      public BoundedInputStream get() throws IOException
      Builds a new BoundedInputStream.

      You must set input that supports AbstractStreamBuilder.getInputStream(), otherwise, this method throws an exception.

      This builder use the following aspects:

      • AbstractStreamBuilder.getInputStream()
      • maxCount
      • propagateClose
      Returns:
      a new instance.
      Throws:
      IllegalStateException - if the origin is null.
      UnsupportedOperationException - if the origin cannot be converted to an InputStream.
      IOException - if an I/O error occurs.
      See Also:
      • AbstractStreamBuilder.getInputStream()
    • setCount

      public BoundedInputStream.Builder setCount(long count)
      Sets the current number of bytes counted.

      Useful when building from another stream to carry forward a read count.

      Default is 0, negative means 0.

      Parameters:
      count - The current number of bytes counted.
      Returns:
      this.
    • setMaxCount

      public BoundedInputStream.Builder setMaxCount(long maxCount)
      Sets the maximum number of bytes to return.

      Default is -1, negative means unbound.

      Parameters:
      maxCount - The maximum number of bytes to return.
      Returns:
      this.
    • setPropagateClose

      public BoundedInputStream.Builder setPropagateClose(boolean propagateClose)
      Sets whether the BoundedInputStream.close() method should propagate to the underling InputStream.

      Default is true.

      Parameters:
      propagateClose - true if calling BoundedInputStream.close() propagates to the close() method of the underlying stream or false if it does not.
      Returns:
      this.