org.apache.http.impl.nio.codecs

## Class LengthDelimitedDecoder

- java.lang.Object
- - org.apache.http.impl.nio.codecs.AbstractContentDecoder
  - - org.apache.http.impl.nio.codecs.LengthDelimitedDecoder

All Implemented Interfaces:
  ContentDecoder, FileContentDecoder

    @NotThreadSafe
    public class LengthDelimitedDecoder
    extends AbstractContentDecoder
    implements FileContentDecoder

Content decoder 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.

This decoder is optimized to transfer data directly from the underlying I/O session's channel to a `FileChannel`, whenever possible avoiding intermediate buffering in the session buffer.

Since:
  4.0

### Field Summary

### Fields inherited from class org.apache.http.impl.nio.codecs.AbstractContentDecoder

`buffer, channel, completed, metrics`

### Constructor Summary

Constructors
Constructor and Description
`LengthDelimitedDecoder(ReadableByteChannel channel, SessionInputBuffer buffer, HttpTransportMetricsImpl metrics, long contentLength)`

### Method Summary

Methods
`int` `read(ByteBuffer dst)` Reads a portion of content from the underlying channel
`String` `toString()`
`long` `transfer(FileChannel dst, long position, long count)` Transfers a portion of entity content from the underlying network channel into the given file channel. Warning: Many implementations cannot write beyond the length of the file.

### Methods inherited from class org.apache.http.impl.nio.codecs.AbstractContentDecoder

`fillBufferFromChannel, isCompleted, readFromChannel, readFromChannel`

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

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

### Methods inherited from interface org.apache.http.nio.ContentDecoder

`isCompleted`

### Constructor Detail

#### LengthDelimitedDecoder

    public LengthDelimitedDecoder(ReadableByteChannel channel,
                          SessionInputBuffer buffer,
                          HttpTransportMetricsImpl metrics,
                          long contentLength)

### Method Detail

#### read

    public int read(ByteBuffer dst)
             throws IOException

Description copied from interface: `ContentDecoder`
Reads a portion of content from the underlying channel

Specified by:
  `read` in interface `ContentDecoder`
Parameters:
  `dst` - The buffer into which entity content is to be transferred
Returns:
  The number of bytes read, possibly zero, or -1 if the channel has reached end-of-stream
Throws:
  `IOException` - if I/O error occurs while reading content

#### transfer

    public long transfer(FileChannel dst,
                long position,
                long count)
                  throws IOException

Description copied from interface: `FileContentDecoder`
Transfers a portion of entity content from the underlying network channel into the given file channel.
Warning: Many implementations cannot write beyond the length of the file. If the position exceeds the channel's size, some implementations may throw an IOException.

Specified by:
  `transfer` in interface `FileContentDecoder`
Parameters:
  `dst` - the target FileChannel to transfer data into.
  `position` - The position within the file at which the transfer is to begin; must be non-negative. Must be less than or equal to the size of the file
  `count` - The maximum number of bytes to be transferred; must be non-negative
Returns:
  The number of bytes, possibly zero, that were actually transferred
Throws:
  `IOException`

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`