Package 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
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 theContent-Length header
. Entities transferred using this stream can be maximumLong.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
-
-
Constructor Summary
Constructors Constructor Description LengthDelimitedDecoder(java.nio.channels.ReadableByteChannel channel, SessionInputBuffer buffer, HttpTransportMetricsImpl metrics, long contentLength)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
read(java.nio.ByteBuffer dst)
Reads a portion of content from the underlying channeljava.lang.String
toString()
long
transfer(java.nio.channels.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
isCompleted
-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.http.nio.ContentDecoder
isCompleted
-
-
-
-
Constructor Detail
-
LengthDelimitedDecoder
public LengthDelimitedDecoder(java.nio.channels.ReadableByteChannel channel, SessionInputBuffer buffer, HttpTransportMetricsImpl metrics, long contentLength)
-
-
Method Detail
-
read
public int read(java.nio.ByteBuffer dst) throws java.io.IOException
Description copied from interface:ContentDecoder
Reads a portion of content from the underlying channel- Specified by:
read
in interfaceContentDecoder
- 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:
java.io.IOException
- if I/O error occurs while reading content
-
transfer
public long transfer(java.nio.channels.FileChannel dst, long position, long count) throws java.io.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 interfaceFileContentDecoder
- 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 filecount
- The maximum number of bytes to be transferred; must be non-negative- Returns:
- The number of bytes, possibly zero, that were actually transferred
- Throws:
java.io.IOException
- if some I/O error occurs.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-