Package org.apache.http.impl.io
Class SessionInputBufferImpl
java.lang.Object
org.apache.http.impl.io.SessionInputBufferImpl
- All Implemented Interfaces:
BufferInfo
,SessionInputBuffer
Abstract base class for session input buffers that stream data from
an arbitrary
InputStream
. This class buffers input data in
an internal byte array for optimal input performance.
readLine(CharArrayBuffer)
and readLine()
methods of this
class treat a lone LF as valid line delimiters in addition to CR-LF required
by the HTTP specification.
- Since:
- 4.3
-
Constructor Summary
ConstructorsConstructorDescriptionSessionInputBufferImpl
(HttpTransportMetricsImpl metrics, int buffersize) SessionInputBufferImpl
(HttpTransportMetricsImpl metrics, int buffersize, int minChunkLimit, MessageConstraints constraints, CharsetDecoder chardecoder) Creates new instance of SessionInputBufferImpl. -
Method Summary
Modifier and TypeMethodDescriptionint
Returns available space in the buffer.void
bind
(InputStream instream) int
capacity()
Returns total capacity of the buffervoid
clear()
int
ReturnsHttpTransportMetrics
for this session buffer.boolean
boolean
isBound()
boolean
isDataAvailable
(int timeout) Blocks until some data becomes available in the session buffer or the given timeout period in milliseconds elapses.int
length()
Return length data stored in the bufferint
read()
Reads the next byte of data from this session buffer.int
read
(byte[] b) Reads some number of bytes from the session buffer and stores them into the buffer arrayb
.int
read
(byte[] b, int off, int len) Reads up tolen
bytes of data from the session buffer into an array of bytes.readLine()
Reads a complete line of characters up to a line delimiter from this session buffer.int
readLine
(CharArrayBuffer charbuffer) Reads a complete line of characters up to a line delimiter from this session buffer into the given line buffer.
-
Constructor Details
-
SessionInputBufferImpl
public SessionInputBufferImpl(HttpTransportMetricsImpl metrics, int buffersize, int minChunkLimit, MessageConstraints constraints, CharsetDecoder chardecoder) Creates new instance of SessionInputBufferImpl.- Parameters:
metrics
- HTTP transport metrics.buffersize
- buffer size. Must be a positive number.minChunkLimit
- size limit below which data chunks should be buffered in memory in order to minimize native method invocations on the underlying network socket. The optimal value of this parameter can be platform specific and defines a trade-off between performance of memory copy operations and that of native method invocation. If negative default chunk limited will be used.constraints
- Message constraints. Ifnull
MessageConstraints.DEFAULT
will be used.chardecoder
- chardecoder to be used for decoding HTTP protocol elements. Ifnull
simple type cast will be used for byte to char conversion.
-
SessionInputBufferImpl
-
-
Method Details
-
bind
-
isBound
public boolean isBound() -
capacity
public int capacity()Description copied from interface:BufferInfo
Returns total capacity of the buffer- Specified by:
capacity
in interfaceBufferInfo
- Returns:
- total capacity
-
length
public int length()Description copied from interface:BufferInfo
Return length data stored in the buffer- Specified by:
length
in interfaceBufferInfo
- Returns:
- data length
-
available
public int available()Description copied from interface:BufferInfo
Returns available space in the buffer.- Specified by:
available
in interfaceBufferInfo
- Returns:
- available space.
-
fillBuffer
- Throws:
IOException
-
hasBufferedData
public boolean hasBufferedData() -
clear
public void clear() -
read
Description copied from interface:SessionInputBuffer
Reads the next byte of data from this session buffer. The value byte is returned as anint
in the range0
to255
. If no byte is available because the end of the stream has been reached, the value-1
is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.- Specified by:
read
in interfaceSessionInputBuffer
- Returns:
- the next byte of data, or
-1
if the end of the stream is reached. - Throws:
IOException
- if an I/O error occurs.
-
read
Description copied from interface:SessionInputBuffer
Reads up tolen
bytes of data from the session buffer into an array of bytes. An attempt is made to read as many aslen
bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer.This method blocks until input data is available, end of file is detected, or an exception is thrown.
If
off
is negative, orlen
is negative, oroff+len
is greater than the length of the arrayb
, then anIndexOutOfBoundsException
is thrown.- Specified by:
read
in interfaceSessionInputBuffer
- Parameters:
b
- the buffer into which the data is read.off
- the start offset in arrayb
at which the data is written.len
- the maximum number of bytes to read.- Returns:
- the total number of bytes read into the buffer, or
-1
if there is no more data because the end of the stream has been reached. - Throws:
IOException
- if an I/O error occurs.
-
read
Description copied from interface:SessionInputBuffer
Reads some number of bytes from the session buffer and stores them into the buffer arrayb
. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.- Specified by:
read
in interfaceSessionInputBuffer
- Parameters:
b
- the buffer into which the data is read.- Returns:
- the total number of bytes read into the buffer, or
-1
is there is no more data because the end of the stream has been reached. - Throws:
IOException
- if an I/O error occurs.
-
readLine
Reads a complete line of characters up to a line delimiter from this session buffer into the given line buffer. The number of chars actually read is returned as an integer. The line delimiter itself is discarded. If no char is available because the end of the stream has been reached, the value-1
is returned. This method blocks until input data is available, end of file is detected, or an exception is thrown.This method treats a lone LF as a valid line delimiters in addition to CR-LF required by the HTTP specification.
- Specified by:
readLine
in interfaceSessionInputBuffer
- Parameters:
charbuffer
- the line buffer.- Returns:
- one line of characters
- Throws:
IOException
- if an I/O error occurs.
-
readLine
Description copied from interface:SessionInputBuffer
Reads a complete line of characters up to a line delimiter from this session buffer. The line delimiter itself is discarded. If no char is available because the end of the stream has been reached,null
is returned. This method blocks until input data is available, end of file is detected, or an exception is thrown.The choice of a char encoding and line delimiter sequence is up to the specific implementations of this interface.
- Specified by:
readLine
in interfaceSessionInputBuffer
- Returns:
- HTTP line as a string
- Throws:
IOException
- if an I/O error occurs.
-
isDataAvailable
Description copied from interface:SessionInputBuffer
Blocks until some data becomes available in the session buffer or the given timeout period in milliseconds elapses. If the timeout value is0
this method blocks indefinitely.- Specified by:
isDataAvailable
in interfaceSessionInputBuffer
- Parameters:
timeout
- in milliseconds.- Returns:
true
if some data is available in the session buffer orfalse
otherwise.- Throws:
IOException
- if an I/O error occurs.
-
getMetrics
Description copied from interface:SessionInputBuffer
ReturnsHttpTransportMetrics
for this session buffer.- Specified by:
getMetrics
in interfaceSessionInputBuffer
- Returns:
- transport metrics.
-