com.oreilly.servlet.multipart
Class BufferedServletInputStream
java.lang.Object
|
+--java.io.InputStream
|
+--javax.servlet.ServletInputStream
|
+--com.oreilly.servlet.multipart.BufferedServletInputStream
- public class BufferedServletInputStream
- extends javax.servlet.ServletInputStream
A BufferedServletInputStream
wraps a
ServletInputStream
in order to provide input buffering and to
avoid calling the the readLine
method of the wrapped
ServletInputStream
.
This is necessary because some servlet containers rely on the default
implementation of the readLine
method provided by the Servlet
API classes, which is very slow. Tomcat 3.2, Tomcat 3.1, the JSWDK 1.0 web
server and the JSDK2.1 web server are all known to need this class for
performance reasons.
Also, it may be used to work around a bug in the Servlet API 2.0
implementation of readLine
which contains a bug that causes
ArrayIndexOutOfBoundsExceptions
under certain conditions.
Apache JServ is known to suffer from this bug.
- Version:
- 1.1, 2001/05/21, removed block of commented out code
- Author:
- Geoff Soutter
Constructor Summary |
BufferedServletInputStream(javax.servlet.ServletInputStream in)
Creates a BufferedServletInputStream that wraps the provided
ServletInputStream . |
Method Summary |
int |
read()
Implement buffering on top of the read method of
the wrapped ServletInputStream . |
int |
read(byte[] b,
int off,
int len)
Implement buffering on top of the read method of
the wrapped ServletInputStream . |
int |
readLine(byte[] b,
int off,
int len)
Implement buffering on top of the readLine method of
the wrapped ServletInputStream . |
Methods inherited from class java.io.InputStream |
available, close, mark, markSupported, read, reset, skip |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
BufferedServletInputStream
public BufferedServletInputStream(javax.servlet.ServletInputStream in)
- Creates a
BufferedServletInputStream
that wraps the provided
ServletInputStream
.
- Parameters:
in
- a servlet input stream.
readLine
public int readLine(byte[] b,
int off,
int len)
throws java.io.IOException
- Implement buffering on top of the
readLine
method of
the wrapped ServletInputStream
.
- Overrides:
readLine
in class javax.servlet.ServletInputStream
- Parameters:
b
- an array of bytes into which data is read.off
- an integer specifying the character at which
this method begins reading.len
- an integer specifying the maximum number of
bytes to read.- 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 I/O error occurs.
read
public int read()
throws java.io.IOException
- Implement buffering on top of the
read
method of
the wrapped ServletInputStream
.
- Overrides:
read
in class java.io.InputStream
- Returns:
- the next byte of data, or
-1
if the end of the
stream is reached. - Throws:
java.io.IOException
- if an I/O error occurs.
read
public int read(byte[] b,
int off,
int len)
throws java.io.IOException
- Implement buffering on top of the
read
method of
the wrapped ServletInputStream
.
- Overrides:
read
in class java.io.InputStream
- Parameters:
b
- the buffer into which the data is read.off
- the start offset of the data.len
- the maximum number of bytes 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:
java.io.IOException
- if an I/O error occurs.