Class ChunkedOutputStream

java.lang.Object
java.io.OutputStream
org.apache.hc.core5.http.impl.io.ChunkedOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

public class ChunkedOutputStream extends OutputStream
Implements chunked transfer coding. The content is sent in small chunks. Entities transferred using this output stream can be of unlimited length. Writes are buffered to an internal buffer (2048 default size).

Note that this class NEVER closes the underlying stream, even when close() gets called. Instead, the stream will be marked as closed and no further output will be permitted.

Since:
4.0
  • Field Details

    • buffer

      private final SessionOutputBuffer buffer
    • outputStream

      private final OutputStream outputStream
    • cache

      private final byte[] cache
    • cachePosition

      private int cachePosition
    • wroteLastChunk

      private boolean wroteLastChunk
    • closed

      private boolean closed
    • lineBuffer

      private final CharArrayBuffer lineBuffer
    • trailerSupplier

      private final Supplier<List<? extends Header>> trailerSupplier
  • Constructor Details

    • ChunkedOutputStream

      public ChunkedOutputStream(SessionOutputBuffer buffer, OutputStream outputStream, byte[] chunkCache, Supplier<List<? extends Header>> trailerSupplier)
      Default constructor.
      Parameters:
      buffer - Session output buffer
      outputStream - Output stream
      chunkCache - Buffer used to aggregate smaller writes into chunks.
      trailerSupplier - Trailer supplier. May be null
      Since:
      5.1
    • ChunkedOutputStream

      public ChunkedOutputStream(SessionOutputBuffer buffer, OutputStream outputStream, int chunkSizeHint, Supplier<List<? extends Header>> trailerSupplier)
      Constructor taking an integer chunk size hint.
      Parameters:
      buffer - Session output buffer
      outputStream - Output stream
      chunkSizeHint - minimal chunk size hint
      trailerSupplier - Trailer supplier. May be null
      Since:
      5.0
    • ChunkedOutputStream

      public ChunkedOutputStream(SessionOutputBuffer buffer, OutputStream outputStream, int chunkSizeHint)
      Constructor with no trailers.
      Parameters:
      buffer - Session output buffer
      outputStream - Output stream
      chunkSizeHint - minimal chunk size hint
  • Method Details

    • flushCache

      private void flushCache() throws IOException
      Writes the cache out onto the underlying stream
      Throws:
      IOException
    • flushCacheWithAppend

      private void flushCacheWithAppend(byte[] bufferToAppend, int off, int len) throws IOException
      Writes the cache and bufferToAppend to the underlying stream as one large chunk
      Throws:
      IOException
    • writeClosingChunk

      private void writeClosingChunk() throws IOException
      Throws:
      IOException
    • writeTrailers

      private void writeTrailers() throws IOException
      Throws:
      IOException
    • finish

      public void finish() throws IOException
      Must be called to ensure the internal cache is flushed and the closing chunk is written.
      Throws:
      IOException - in case of an I/O error
    • write

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

      public void write(byte[] b) throws IOException
      Writes the array. If the array does not fit within the buffer, it is not split, but rather written out as one large chunk.
      Overrides:
      write in class OutputStream
      Throws:
      IOException
    • write

      public void write(byte[] src, int off, int len) throws IOException
      Writes the array. If the array does not fit within the buffer, it is not split, but rather written out as one large chunk.
      Overrides:
      write in class OutputStream
      Throws:
      IOException
    • flush

      public void flush() throws IOException
      Flushes the content buffer and the underlying stream.
      Specified by:
      flush in interface Flushable
      Overrides:
      flush in class OutputStream
      Throws:
      IOException
    • close

      public void close() throws IOException
      Finishes writing to the underlying stream, but does NOT close the underlying stream.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class OutputStream
      Throws:
      IOException