Package org.apache.catalina.connector
Class InputBuffer
- java.lang.Object
-
- java.io.Reader
-
- org.apache.catalina.connector.InputBuffer
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.lang.Readable,ByteChunk.ByteInputChannel,ApplicationBufferHandler
public class InputBuffer extends java.io.Reader implements ByteChunk.ByteInputChannel, ApplicationBufferHandler
The buffer used by Tomcat request. This is a derivative of the Tomcat 3.3 OutputBuffer, adapted to handle input instead of output. This allows complete recycling of the facade objects (the ServletInputStream and the BufferedReader).
-
-
Field Summary
Fields Modifier and Type Field Description intBYTE_STATEState when reading byte data.intCHAR_STATEState when reading character data.protected B2CConverterconvCurrent byte to char converter.static intDEFAULT_BUFFER_SIZEDefault buffer size in bytes.intINITIAL_STATEInitial state before any read operation.protected static StringManagersmThe string manager for this package.-
Fields inherited from interface org.apache.tomcat.util.net.ApplicationBufferHandler
EMPTY
-
-
Constructor Summary
Constructors Constructor Description InputBuffer()Default constructor.InputBuffer(int size)Alternate constructor which allows specifying the initial buffer size.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()Returns the number of bytes or characters available in the buffer.voidcheckConverter()Ensures a byte-to-char converter is available, initializing one if necessary.voidclose()voidexpand(int size)Expand the byte buffer to at least the given size.java.nio.ByteBuffergetByteBuffer()Obtain the ByteBuffer this channel is targeting.booleanisFinished()Checks if all data has been read from the input buffer.booleanisReady()Checks if the input buffer is ready for reading.voidmark(int readAheadLimit)booleanmarkSupported()intread()intread(byte[] b, int off, int len)Reads bytes into the specified array.intread(char[] cbuf)intread(char[] cbuf, int off, int len)intread(java.nio.ByteBuffer to)Transfers bytes from the buffer to the specified ByteBuffer.intreadByte()Reads a single byte from the buffer.booleanready()intrealReadBytes()Read new bytes.intrealReadChars()Reads characters from the byte buffer using the current converter.voidrecycle()Recycle the output buffer.voidreset()voidsetByteBuffer(java.nio.ByteBuffer buffer)Set the byte buffer.voidsetReadListener(ReadListener listener)Sets the read listener for async request processing.voidsetRequest(Request coyoteRequest)Associated Coyote request.longskip(long n)
-
-
-
Field Detail
-
sm
protected static final StringManager sm
The string manager for this package.
-
DEFAULT_BUFFER_SIZE
public static final int DEFAULT_BUFFER_SIZE
Default buffer size in bytes.- See Also:
- Constant Field Values
-
INITIAL_STATE
public final int INITIAL_STATE
Initial state before any read operation.- See Also:
- Constant Field Values
-
CHAR_STATE
public final int CHAR_STATE
State when reading character data.- See Also:
- Constant Field Values
-
BYTE_STATE
public final int BYTE_STATE
State when reading byte data.- See Also:
- Constant Field Values
-
conv
protected B2CConverter conv
Current byte to char converter.
-
-
Method Detail
-
setRequest
public void setRequest(Request coyoteRequest)
Associated Coyote request.- Parameters:
coyoteRequest- Associated Coyote request
-
recycle
public void recycle()
Recycle the output buffer.
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein classjava.io.Reader- Throws:
java.io.IOException
-
available
public int available()
Returns the number of bytes or characters available in the buffer.- Returns:
- the number of bytes or characters available
-
setReadListener
public void setReadListener(ReadListener listener)
Sets the read listener for async request processing.- Parameters:
listener- the read listener to set
-
isFinished
public boolean isFinished()
Checks if all data has been read from the input buffer.- Returns:
trueif all data has been read
-
isReady
public boolean isReady()
Checks if the input buffer is ready for reading.- Returns:
trueif the buffer is ready
-
realReadBytes
public int realReadBytes() throws java.io.IOExceptionDescription copied from interface:ByteChunk.ByteInputChannelRead new bytes.- Specified by:
realReadBytesin interfaceByteChunk.ByteInputChannel- Returns:
- The number of bytes read
- Throws:
java.io.IOException- If an I/O error occurs during reading
-
readByte
public int readByte() throws java.io.IOExceptionReads a single byte from the buffer.- Returns:
- the byte read, or -1 if end of stream
- Throws:
java.io.IOException- if an I/O error occurs
-
read
public int read(byte[] b, int off, int len) throws java.io.IOExceptionReads bytes into the specified array.- Parameters:
b- the buffer into which the data is readoff- the start offset in the destination arraylen- the maximum number of bytes to read- Returns:
- the number of bytes read, or -1 if end of stream
- Throws:
java.io.IOException- if an I/O error occurs
-
read
public int read(java.nio.ByteBuffer to) throws java.io.IOExceptionTransfers bytes from the buffer to the specified ByteBuffer. After the operation the position of the ByteBuffer will be returned to the one before the operation, the limit will be the position incremented by the number of the transferred bytes.- Parameters:
to- the ByteBuffer into which bytes are to be written.- Returns:
- an integer specifying the actual number of bytes read, or -1 if the end of the stream is reached
- Throws:
java.io.IOException- if an input or output exception has occurred
-
realReadChars
public int realReadChars() throws java.io.IOExceptionReads characters from the byte buffer using the current converter.- Returns:
- the number of characters read, or -1 if end of stream
- Throws:
java.io.IOException- if an I/O error occurs
-
read
public int read() throws java.io.IOException- Overrides:
readin classjava.io.Reader- Throws:
java.io.IOException
-
read
public int read(char[] cbuf) throws java.io.IOException- Overrides:
readin classjava.io.Reader- Throws:
java.io.IOException
-
read
public int read(char[] cbuf, int off, int len) throws java.io.IOException- Specified by:
readin classjava.io.Reader- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOException- Overrides:
skipin classjava.io.Reader- Throws:
java.io.IOException
-
ready
public boolean ready() throws java.io.IOException- Overrides:
readyin classjava.io.Reader- Throws:
java.io.IOException
-
markSupported
public boolean markSupported()
- Overrides:
markSupportedin classjava.io.Reader
-
mark
public void mark(int readAheadLimit) throws java.io.IOException- Overrides:
markin classjava.io.Reader- Throws:
java.io.IOException
-
reset
public void reset() throws java.io.IOException- Overrides:
resetin classjava.io.Reader- Throws:
java.io.IOException
-
checkConverter
public void checkConverter() throws java.io.IOExceptionEnsures a byte-to-char converter is available, initializing one if necessary.- Throws:
java.io.IOException- if an I/O error occurs
-
setByteBuffer
public void setByteBuffer(java.nio.ByteBuffer buffer)
Description copied from interface:ApplicationBufferHandlerSet the byte buffer.- Specified by:
setByteBufferin interfaceApplicationBufferHandler- Parameters:
buffer- the byte buffer
-
getByteBuffer
public java.nio.ByteBuffer getByteBuffer()
Description copied from interface:ByteChunk.ByteInputChannelObtain the ByteBuffer this channel is targeting.- Specified by:
getByteBufferin interfaceApplicationBufferHandler- Specified by:
getByteBufferin interfaceByteChunk.ByteInputChannel- Returns:
- the ByteBuffer this channel is targeting
-
expand
public void expand(int size)
Description copied from interface:ApplicationBufferHandlerExpand the byte buffer to at least the given size. Some implementations may not implement this.- Specified by:
expandin interfaceApplicationBufferHandler- Parameters:
size- the desired size
-
-