Class OutputBuffer

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.Appendable, java.lang.AutoCloseable

    public class OutputBuffer
    extends java.io.Writer
    The buffer used by Tomcat response. This is a derivative of the Tomcat 3.3 OutputBuffer, with the removal of some of the state handling (which in Coyote is mostly the Processor's responsibility).
    Author:
    Costin Manolache, Remy Maucherat
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected C2BConverter conv
      Current char to byte converter.
      static int DEFAULT_BUFFER_SIZE  
      • Fields inherited from class java.io.Writer

        lock
    • Constructor Summary

      Constructors 
      Constructor Description
      OutputBuffer​(int size)
      Create the buffer with the specified initial size.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void append​(byte[] src, int off, int len)
      Add data to the buffer.
      void append​(char[] src, int off, int len)
      Add data to the buffer.
      void append​(java.nio.ByteBuffer from)  
      void checkConverter()  
      void checkRegisterForWrite()  
      void close()
      Close the output buffer.
      protected void doFlush​(boolean realFlush)
      Flush bytes or chars contained in the buffer.
      void flush()
      Flush bytes or chars contained in the buffer.
      int getBufferSize()  
      long getContentWritten()  
      boolean isBlocking()  
      boolean isClosed()
      Is the response output closed ?
      boolean isNew()
      Has this buffer been used at all?
      boolean isReady()  
      boolean isSuspended()
      Is the response output suspended ?
      void realWriteBytes​(java.nio.ByteBuffer buf)
      Sends the buffer data to the client output, checking the state of Response and calling the right interceptors.
      void realWriteChars​(java.nio.CharBuffer from)
      Convert the chars to bytes, then send the data to the client.
      void recycle()
      Recycle the output buffer.
      void reset()  
      void reset​(boolean resetWriterStreamFlags)  
      void setBufferSize​(int size)  
      void setResponse​(Response coyoteResponse)
      Associated Coyote response.
      void setSuspended​(boolean suspended)
      Set the suspended flag.
      void setWriteListener​(WriteListener listener)  
      void write​(byte[] b, int off, int len)  
      void write​(char[] c)  
      void write​(char[] c, int off, int len)  
      void write​(int c)  
      void write​(java.lang.String s)  
      void write​(java.lang.String s, int off, int len)
      Append a string to the buffer
      void write​(java.nio.ByteBuffer from)  
      void writeByte​(int b)  
      • Methods inherited from class java.io.Writer

        append, append, append, nullWriter
      • Methods inherited from class java.lang.Object

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

      • OutputBuffer

        public OutputBuffer​(int size)
        Create the buffer with the specified initial size.
        Parameters:
        size - Buffer size to use
    • Method Detail

      • setResponse

        public void setResponse​(Response coyoteResponse)
        Associated Coyote response.
        Parameters:
        coyoteResponse - Associated Coyote response
      • isSuspended

        public boolean isSuspended()
        Is the response output suspended ?
        Returns:
        suspended flag value
      • setSuspended

        public void setSuspended​(boolean suspended)
        Set the suspended flag.
        Parameters:
        suspended - New suspended flag value
      • isClosed

        public boolean isClosed()
        Is the response output closed ?
        Returns:
        closed flag value
      • recycle

        public void recycle()
        Recycle the output buffer.
      • close

        public void close()
                   throws java.io.IOException
        Close the output buffer. This tries to calculate the response size if the response has not been committed yet.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in class java.io.Writer
        Throws:
        java.io.IOException - An underlying IOException occurred
      • flush

        public void flush()
                   throws java.io.IOException
        Flush bytes or chars contained in the buffer.
        Specified by:
        flush in interface java.io.Flushable
        Specified by:
        flush in class java.io.Writer
        Throws:
        java.io.IOException - An underlying IOException occurred
      • doFlush

        protected void doFlush​(boolean realFlush)
                        throws java.io.IOException
        Flush bytes or chars contained in the buffer.
        Parameters:
        realFlush - true if this should also cause a real network flush
        Throws:
        java.io.IOException - An underlying IOException occurred
      • realWriteBytes

        public void realWriteBytes​(java.nio.ByteBuffer buf)
                            throws java.io.IOException
        Sends the buffer data to the client output, checking the state of Response and calling the right interceptors.
        Parameters:
        buf - the ByteBuffer to be written to the response
        Throws:
        java.io.IOException - An underlying IOException occurred
      • write

        public void write​(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • write

        public void write​(java.nio.ByteBuffer from)
                   throws java.io.IOException
        Throws:
        java.io.IOException
      • writeByte

        public void writeByte​(int b)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • realWriteChars

        public void realWriteChars​(java.nio.CharBuffer from)
                            throws java.io.IOException
        Convert the chars to bytes, then send the data to the client.
        Parameters:
        from - Char buffer to be written to the response
        Throws:
        java.io.IOException - An underlying IOException occurred
      • write

        public void write​(int c)
                   throws java.io.IOException
        Overrides:
        write in class java.io.Writer
        Throws:
        java.io.IOException
      • write

        public void write​(char[] c)
                   throws java.io.IOException
        Overrides:
        write in class java.io.Writer
        Throws:
        java.io.IOException
      • write

        public void write​(char[] c,
                          int off,
                          int len)
                   throws java.io.IOException
        Specified by:
        write in class java.io.Writer
        Throws:
        java.io.IOException
      • write

        public void write​(java.lang.String s,
                          int off,
                          int len)
                   throws java.io.IOException
        Append a string to the buffer
        Overrides:
        write in class java.io.Writer
        Throws:
        java.io.IOException
      • write

        public void write​(java.lang.String s)
                   throws java.io.IOException
        Overrides:
        write in class java.io.Writer
        Throws:
        java.io.IOException
      • checkConverter

        public void checkConverter()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • getContentWritten

        public long getContentWritten()
      • isNew

        public boolean isNew()
        Has this buffer been used at all?
        Returns:
        true if no chars or bytes have been added to the buffer since the last call to recycle()
      • setBufferSize

        public void setBufferSize​(int size)
      • reset

        public void reset()
      • reset

        public void reset​(boolean resetWriterStreamFlags)
      • getBufferSize

        public int getBufferSize()
      • isReady

        public boolean isReady()
      • setWriteListener

        public void setWriteListener​(WriteListener listener)
      • isBlocking

        public boolean isBlocking()
      • checkRegisterForWrite

        public void checkRegisterForWrite()
      • append

        public void append​(byte[] src,
                           int off,
                           int len)
                    throws java.io.IOException
        Add data to the buffer.
        Parameters:
        src - Bytes array
        off - Offset
        len - Length
        Throws:
        java.io.IOException - Writing overflow data to the output channel failed
      • append

        public void append​(char[] src,
                           int off,
                           int len)
                    throws java.io.IOException
        Add data to the buffer.
        Parameters:
        src - Char array
        off - Offset
        len - Length
        Throws:
        java.io.IOException - Writing overflow data to the output channel failed
      • append

        public void append​(java.nio.ByteBuffer from)
                    throws java.io.IOException
        Throws:
        java.io.IOException