Class InputStreamContentProvider

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Iterable<java.nio.ByteBuffer>, ContentProvider, Callback, Invocable
    Direct Known Subclasses:
    ProxyServlet.ProxyInputStreamContentProvider

    public class InputStreamContentProvider
    extends java.lang.Object
    implements ContentProvider, Callback, java.io.Closeable
    A ContentProvider for an InputStream.

    The input stream is read once and therefore fully consumed. Invocations to the iterator() method after the first will return an "empty" iterator because the stream has been consumed on the first invocation.

    However, it is possible for subclasses to override onRead(byte[], int, int) to copy the content read from the stream to another location (for example a file), and be able to support multiple invocations of iterator(), returning the iterator provided by this class on the first invocation, and an iterator on the bytes copied to the other location for subsequent invocations.

    It is possible to specify, at the constructor, a buffer size used to read content from the stream, by default 4096 bytes.

    The InputStream passed to the constructor is by default closed when is it fully consumed (or when an exception is thrown while reading it), unless otherwise specified to the constructor.

    • Constructor Detail

      • InputStreamContentProvider

        public InputStreamContentProvider​(java.io.InputStream stream)
      • InputStreamContentProvider

        public InputStreamContentProvider​(java.io.InputStream stream,
                                          int bufferSize)
      • InputStreamContentProvider

        public InputStreamContentProvider​(java.io.InputStream stream,
                                          int bufferSize,
                                          boolean autoClose)
    • Method Detail

      • getLength

        public long getLength()
        Specified by:
        getLength in interface ContentProvider
        Returns:
        the content length, if known, or -1 if the content length is unknown
      • onRead

        protected java.nio.ByteBuffer onRead​(byte[] buffer,
                                             int offset,
                                             int length)
        Callback method invoked just after having read from the stream, but before returning the iteration element (a ByteBuffer to the caller.

        Subclasses may override this method to copy the content read from the stream to another location (a file, or in memory if the content is known to fit).

        Parameters:
        buffer - the byte array containing the bytes read
        offset - the offset from where bytes should be read
        length - the length of the bytes read
        Returns:
        a ByteBuffer wrapping the byte array
      • onReadFailure

        protected void onReadFailure​(java.lang.Throwable failure)
        Callback method invoked when an exception is thrown while reading from the stream.
        Parameters:
        failure - the exception thrown while reading from the stream.
      • iterator

        public java.util.Iterator<java.nio.ByteBuffer> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<java.nio.ByteBuffer>
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
      • failed

        public void failed​(java.lang.Throwable failure)
        Description copied from interface: Callback

        Callback invoked when the operation fails.

        Specified by:
        failed in interface Callback
        Parameters:
        failure - the reason for the operation failure