Class InputBuffer

  • Direct Known Subclasses:
    ServerInputBuffer

    public class InputBuffer
    extends java.lang.Object
    Abstraction exposing both byte and character methods to read content from the HTTP messaging system in Grizzly.
    • Field Detail

      • trailers

        protected java.util.Map<java.lang.String,​java.lang.String> trailers
        Trailer headers, if any.
    • Constructor Detail

      • InputBuffer

        public InputBuffer()
    • Method Detail

      • initialize

        public void initialize​(HttpHeader httpHeader,
                               FilterChainContext ctx)

        Per-request initialization required for the InputBuffer to function properly.

        Parameters:
        httpHeader - the header from which input will be obtained.
        ctx - the FilterChainContext for the chain processing this request
      • setDefaultEncoding

        public void setDefaultEncoding​(java.lang.String encoding)
        Set the default character encoding for this InputBuffer, which would be applied if no encoding was explicitly set on HTTP HttpRequestPacket and character decoding wasn't started yet.
      • recycle

        public void recycle()

        Recycle this InputBuffer for reuse.

      • processingChars

        public void processingChars()

        This method should be called if the InputBuffer is being used in conjunction with a Reader implementation. If this method is not called, any character-based methods called on this InputBuffer will throw a IllegalStateException.

      • readByte

        public int readByte()
                     throws java.io.IOException
        This method always blocks.
        Throws:
        java.io.IOException
        See Also:
        InputStream.read()
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        InputStream.read(byte[], int, int)
      • readyData

        public int readyData()
        Depending on the InputBuffer mode, method will return either number of available bytes or characters ready to be read without blocking.
        Returns:
        depending on the InputBuffer mode, method will return either number of available bytes or characters ready to be read without blocking.
      • available

        public int available()
        See Also:
        InputStream.available()
      • getBuffer

        public Buffer getBuffer()
        Returns the duplicate of the underlying Buffer used to buffer incoming request data. The content of the returned buffer will be that of the underlying buffer. Changes to returned buffer's content will be visible in the underlying buffer, and vice versa; the two buffers' position, limit, and mark values will be independent.
        Returns:
        the duplicate of the underlying Buffer used to buffer incoming request data.
      • readBuffer

        public Buffer readBuffer()
        Returns:
        the underlying Buffer used to buffer incoming request data. Unlike getBuffer(), this method detaches the returned Buffer, so user code becomes responsible for handling the Buffer.
      • readBuffer

        public Buffer readBuffer​(int size)
        Parameters:
        size - the requested size of the Buffer to be returned.
        Returns:
        the Buffer of a given size, which represents a chunk of the underlying Buffer which contains incoming request data. This method detaches the returned Buffer, so user code becomes responsible for handling its life-cycle.
      • read

        public int read​(java.nio.CharBuffer target)
                 throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        Reader.read(java.nio.CharBuffer)
      • readChar

        public int readChar()
                     throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        Reader.read()
      • read

        public int read​(char[] cbuf,
                        int off,
                        int len)
                 throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        Reader.read(char[], int, int)
      • ready

        public boolean ready()
        See Also:
        Reader.ready()
      • fillFully

        public void fillFully​(int length)
                       throws java.io.IOException
        /** Fill the buffer (blocking) up to the requested length.
        Parameters:
        length - how much content should attempt to buffer, -1 means buffer entire request.
        Throws:
        java.io.IOException - if an error occurs reading data from the wire.
      • availableChar

        public int availableChar()
      • mark

        public void mark​(int readAheadLimit)

        Supported with binary and character data.

        See Also:
        InputStream.mark(int), Reader.mark(int)
      • markSupported

        public boolean markSupported()

        Only supported with binary data.

        See Also:
        InputStream.markSupported()
      • reset

        public void reset()
                   throws java.io.IOException

        Only supported with binary data.

        Throws:
        java.io.IOException
        See Also:
        InputStream.reset()
      • close

        public void close()
                   throws java.io.IOException
        Throws:
        java.io.IOException
        See Also:
        Closeable.close()
      • skip

        @Deprecated
        public long skip​(long n,
                         boolean block)
                  throws java.io.IOException
        Deprecated.
        pls. use skip(long), the block parameter will be ignored
        Skips the specified number of bytes/characters.
        Throws:
        java.io.IOException
        See Also:
        InputStream.skip(long), Reader.skip(long)
      • skip

        public long skip​(long n)
                  throws java.io.IOException
        Skips the specified number of bytes/characters.
        Throws:
        java.io.IOException
        See Also:
        InputStream.skip(long), Reader.skip(long)
      • getTrailers

        public java.util.Map<java.lang.String,​java.lang.String> getTrailers()
      • areTrailersAvailable

        public boolean areTrailersAvailable()
      • finished

        protected void finished()
        When invoked, this method will call ReadHandler.onAllDataRead() on the current ReadHandler (if any). This method shouldn't be invoked by developers directly.
      • replayPayload

        public void replayPayload​(Buffer buffer)
      • isFinished

        public boolean isFinished()
        Returns:
        true if all request data has been read, otherwise returns false.
      • isClosed

        public boolean isClosed()
        Returns:
        true if this InputBuffer is closed, otherwise returns false.
      • notifyAvailable

        public void notifyAvailable​(ReadHandler handler)
        Installs a ReadHandler that will be notified when any data becomes available to read without blocking.
        Parameters:
        handler - the ReadHandler to invoke.
        Throws:
        java.lang.IllegalArgumentException - if handler is null.
        java.lang.IllegalStateException - if an attempt is made to register a handler before an existing registered handler has been invoked or if all request data has already been read.
      • notifyAvailable

        public void notifyAvailable​(ReadHandler handler,
                                    int size)
        Installs a ReadHandler that will be notified when the specified amount of data is available to be read without blocking.
        Parameters:
        handler - the ReadHandler to invoke.
        size - the minimum number of bytes that must be available before the ReadHandler is notified.
        Throws:
        java.lang.IllegalArgumentException - if handler is null, or if size is less or equal to zero.
        java.lang.IllegalStateException - if an attempt is made to register a handler before an existing registered handler has been invoked.
      • append

        public boolean append​(HttpContent httpContent)
                       throws java.io.IOException
        Appends the specified Buffer to the internal composite Buffer.
        Parameters:
        httpContent - the HttpContent to append
        Returns:
        true if ReadHandler callback was invoked, otherwise returns false.
        Throws:
        java.io.IOException - if an error occurs appending the Buffer
      • isAsyncEnabled

        @Deprecated
        public boolean isAsyncEnabled()
        Deprecated.
        will always return true
        Returns:
        if this buffer is being used to process asynchronous data.
      • setAsyncEnabled

        @Deprecated
        public void setAsyncEnabled​(boolean asyncEnabled)
        Deprecated.
        Sets the asynchronous processing state of this InputBuffer.
        Parameters:
        asyncEnabled - true if this InputBuffer is to be used to process asynchronous request data. @deprecated InputBuffer always supports async mode
      • terminate

        public void terminate()

        Invoke ReadHandler.onError(Throwable) (assuming a ReadHandler is available) } passing a {#link CancellationException} if the current Connection is open, or a {#link EOFException} if the connection was unexpectedly closed.

        Since:
        2.0.1
      • initiateAsyncronousDataReceiving

        public void initiateAsyncronousDataReceiving()
        Initiates asynchronous data receiving. This is service method, usually users don't have to call it explicitly.
      • getThreadPool

        protected java.util.concurrent.Executor getThreadPool()
        Returns:
        Executor, which will be used for notifying user registered ReadHandler.
      • blockingRead

        protected HttpContent blockingRead()
                                    throws java.io.IOException
        Read next chunk of data in this thread, block if needed.
        Returns:
        HttpContent
        Throws:
        java.io.IOException - if an error occurs reading data from the wire.
      • updateInputContentBuffer

        protected void updateInputContentBuffer​(Buffer buffer)