Class BodyInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable
    Direct Known Subclasses:
    AsynchronousBodyInputStream

    abstract class BodyInputStream
    extends NonBlockingInputStream
    TODO consider exposing the mode as part of the API, so the user can make decisions based on the mode

    An extension of NonBlockingInputStream that adds methods that enable using the stream asynchronously. The asynchronous mode is inspired by and works in a very similar way as Servlet asynchronous streams introduced in Servlet 3.1.

    The stream supports 2 modes of operation SYNCHRONOUS and ASYNCHRONOUS. The stream is one of the following 3 states:

    • UNDECIDED
    • SYNCHRONOUS
    • ASYNCHRONOUS
    UNDECIDED is an initial mode and it commits either to SYNCHRONOUS or ASYNCHRONOUS. Once it commits to one of these 2 modes it cannot change to the other. The mode it commits to is decided based on the first use of te stream. If setReadListener(ReadListener) is invoked before any of the read or tryRead methods, it commits to ASYNCHRONOUS mode and similarly if any of the read or tryRead methods is invoked before setReadListener(ReadListener), it commits to SYNCHRONOUS mode.
    • Constructor Summary

      Constructors 
      Constructor Description
      BodyInputStream()  
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      abstract boolean isReady()
      Returns true if data can be read without blocking else returns false.
      abstract void setReadListener​(ReadListener readListener)
      Instructs the stream to invoke the provided ReadListener when it is possible to read.
      • Methods inherited from class java.io.InputStream

        close, mark, markSupported, nullInputStream, read, read, read, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • BodyInputStream

        BodyInputStream()
    • Method Detail

      • isReady

        public abstract boolean isReady()
        Returns true if data can be read without blocking else returns false.

        If the stream is in ASYNCHRONOUS mode and the user attempts to read from it even though this method returns false, an IllegalStateException is thrown.

        Returns:
        true if data can be obtained without blocking, otherwise returns false.
      • setReadListener

        public abstract void setReadListener​(ReadListener readListener)
        Instructs the stream to invoke the provided ReadListener when it is possible to read.

        If the stream is in UNDECIDED state, invoking this method will commit the stream to ASYNCHRONOUS mode.

        Parameters:
        readListener - the ReadListener that should be notified when it's possible to read.
        Throws:
        java.lang.IllegalStateException - if one of the following conditions is true
        • the stream has already committed to SYNCHRONOUS mode.
        • setReadListener is called more than once within the scope of the same request.
        java.lang.NullPointerException - if readListener is null