Class CommittingOutputStream

java.lang.Object
java.io.OutputStream
org.glassfish.jersey.message.internal.CommittingOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

public final class CommittingOutputStream extends OutputStream
A committing output stream with optional serialized entity buffering functionality which allows measuring of the entity size.

When buffering functionality is enabled the output stream buffers the written bytes into an internal buffer of a configurable size. After the last written byte the commit() method is expected to be called to notify a callback with an actual measured entity size. If the entity is too large to fit into the internal buffer and the buffer exceeds before the commit() is called then the stream is automatically committed and the callback is called with parameter size value of -1.

Callback method also returns the output stream in which the output will be written. The committing output stream must be initialized with the callback using setStreamProvider(org.glassfish.jersey.message.internal.OutboundMessageContext.StreamProvider) before first byte is written.

The buffering is by default disabled and can be enabled by calling enableBuffering() or enableBuffering(int) before writing the first byte into this output stream. The former method enables buffering with the default size 8192 bytes specified in DEFAULT_BUFFER_SIZE.

Author:
Paul Sandoz, Marek Potociar, Miroslav Fuksa
  • Field Details

    • DEFAULT_BUFFER_SIZE

      public static final int DEFAULT_BUFFER_SIZE
      Default size of the buffer which will be used if no user defined size is specified.
      See Also:
  • Constructor Details

    • CommittingOutputStream

      public CommittingOutputStream()
      Creates new committing output stream. The returned stream instance still needs to be initialized before writing first bytes.
  • Method Details

    • setStreamProvider

      public void setStreamProvider(OutboundMessageContext.StreamProvider streamProvider)
      Set the buffering output stream provider. If the committing output stream works in buffering mode this method must be called before first bytes are written into this stream.
      Parameters:
      streamProvider - non-null stream provider callback.
    • enableBuffering

      public void enableBuffering(int bufferSize)
      Enable buffering of the serialized entity.
      Parameters:
      bufferSize - size of the buffer. When the value is less or equal to zero the buffering will be disabled and -1 will be passed to the callback.
    • isCommitted

      public boolean isCommitted()
      Determine whether the stream was already committed or not.
      Returns:
      true if this stream was already committed, false otherwise.
    • write

      public void write(byte[] b) throws IOException
      Overrides:
      write in class OutputStream
      Throws:
      IOException
    • write

      public void write(byte[] b, int off, int len) throws IOException
      Overrides:
      write in class OutputStream
      Throws:
      IOException
    • write

      public void write(int b) throws IOException
      Specified by:
      write in class OutputStream
      Throws:
      IOException
    • commit

      public void commit() throws IOException
      Commit the output stream.
      Throws:
      IOException - when underlying stream returned from the callback method throws the io exception.
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class OutputStream
      Throws:
      IOException
    • isClosed

      public boolean isClosed()
      Check if the committing output stream has been closed already.
      Returns:
      true if the stream has been closed, false otherwise.
    • flush

      public void flush() throws IOException
      Specified by:
      flush in interface Flushable
      Overrides:
      flush in class OutputStream
      Throws:
      IOException