org.apache.hc.core5.http.impl.io

## Class ContentLengthInputStream

- java.lang.Object
- - java.io.InputStream
  - - org.apache.hc.core5.http.impl.io.ContentLengthInputStream

- All Implemented Interfaces:
    Closeable, AutoCloseable

      public class ContentLengthInputStream
      extends InputStream

  Input stream that cuts off after a defined number of bytes. This class is used to receive content of HTTP messages where the end of the content entity is determined by the value of the `Content-Length header`. Entities transferred using this stream can be maximum `Long.MAX_VALUE` long.

  Note that this class NEVER closes the underlying stream, even when `close()` gets called. Instead, it will read until the "end" of its limit on close, which allows for the seamless execution of subsequent HTTP 1.1 requests, while not requiring the client to remember to read the entire contents of the response.

  Since:
    4.0

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ContentLengthInputStream(SessionInputBuffer buffer, InputStream inputStream, long contentLength)` Default constructor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `available()`
    `void` | `close()` Reads until the end of the known length of content.
    `int` | `read()` Read the next byte from the stream
    `int` | `read(byte[] b)` Read more bytes from the stream.
    `int` | `read(byte[] b, int off, int len)` Does standard `InputStream.read(byte[], int, int)` behavior, but also notifies the watcher when the contents have been consumed.
    `long` | `skip(long n)` Skips and discards a number of bytes from the input stream.

    - ### Methods inherited from class java.io.InputStream

      `mark, markSupported, reset`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ContentLengthInputStream

          public ContentLengthInputStream(SessionInputBuffer buffer,
                                          InputStream inputStream,
                                          long contentLength)

      Default constructor.
      Parameters:
        `buffer` - Session input buffer
        `inputStream` - Input stream
        `contentLength` - The maximum number of bytes that can be read from the stream. Subsequent read operations will return -1.

  - ### Method Detail

    - #### close

          public void close()
                     throws IOException

      Reads until the end of the known length of content.

      Does NOT close the underlying stream, but instead leaves it primed to parse the next response.

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Overrides:
        `close` in class `InputStream`
      Throws:
        `IOException` - If an IO problem occurs.

    - #### available

          public int available()
                        throws IOException

      Overrides:
        `available` in class `InputStream`
      Throws:
        `IOException`

    - #### read

          public int read()
                   throws IOException

      Read the next byte from the stream
      Specified by:
        `read` in class `InputStream`
      Returns:
        The next byte or -1 if the end of stream has been reached.
      Throws:
        `IOException` - If an IO problem occurs
      See Also:
        `InputStream.read()`

    - #### read

          public int read(byte[] b,
                          int off,
                          int len)
                   throws IOException

      Does standard `InputStream.read(byte[], int, int)` behavior, but also notifies the watcher when the contents have been consumed.
      Overrides:
        `read` in class `InputStream`
      Parameters:
        `b` - The byte array to fill.
        `off` - Start filling at this position.
        `len` - The number of bytes to attempt to read.
      Returns:
        The number of bytes read, or -1 if the end of content has been reached.
      Throws:
        `IOException` - Should an error occur on the wrapped stream.

    - #### read

          public int read(byte[] b)
                   throws IOException

      Read more bytes from the stream.
      Overrides:
        `read` in class `InputStream`
      Parameters:
        `b` - The byte array to put the new data in.
      Returns:
        The number of bytes read into the buffer.
      Throws:
        `IOException` - If an IO problem occurs
      See Also:
        `InputStream.read(byte[])`

    - #### skip

          public long skip(long n)
                    throws IOException

      Skips and discards a number of bytes from the input stream.
      Overrides:
        `skip` in class `InputStream`
      Parameters:
        `n` - The number of bytes to skip.
      Returns:
        The actual number of bytes skipped. ≤ 0 if no bytes are skipped.
      Throws:
        `IOException` - If an error occurs while skipping bytes.
      See Also:
        `InputStream.skip(long)`

Copyright © 2005–2022 The Apache Software Foundation. All rights reserved.