Class LengthDelimitedDecoder

  • All Implemented Interfaces:
    ContentDecoder, FileContentDecoder

    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
    • 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 - if some I/O error occurs.