org.apache.struts.upload
Class BufferedMultipartInputStream

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--org.apache.struts.upload.BufferedMultipartInputStream

public class BufferedMultipartInputStream
extends java.io.InputStream

This class implements buffering for an InputStream as well as a readLine method. The purpose of this is to provide a reliable readLine() method.


Field Summary
protected  byte[] buffer
          The byte array used to hold buffered data
protected  int bufferLength
          The number of bytes read from the underlying InputStream that are in the buffer
protected  int bufferOffset
          The current offset we're at in the buffer's byte array
protected  int bufferSize
          The size of the byte array buffer
protected  long contentLength
          The content length of the multipart data
protected  boolean contentLengthMet
          Whether or not bytes up to the Content-Length have been read
protected  java.io.InputStream inputStream
          The underlying InputStream used by this class
protected  boolean maxLengthMet
          Whether or not bytes up to the maximum length have been read
protected  long maxSize
          The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length
protected  int totalLength
          The total number of bytes read so far
 
Fields inherited from class java.io.InputStream
 
Constructor Summary
BufferedMultipartInputStream(java.io.InputStream inputStream, int bufferSize, long contentLength, long maxSize)
          Public constructor for this class, just wraps the InputStream given
 
Method Summary
 int available()
          This method returns the number of available bytes left to read in the buffer before it has to be refilled
 void close()
          This method attempts to close the underlying InputStream
 boolean contentLengthMet()
           
protected  void fill()
          Fills the buffer with data from the underlying inputStream.
 void mark(int position)
          This method calls on the mark() method of the underlying InputStream
 boolean markSupported()
          This method calls on the markSupported() method of the underlying InputStream
 boolean maxLengthMet()
           
 int read()
          This method returns the next byte in the buffer, and refills it if necessary.
 int read(byte[] b)
          This method populates the byte array b with data up to b.length bytes
 int read(byte[] b, int offset, int length)
          This method populates the byte array b with data up to length starting at b[offset]
 byte[] readLine()
          This method reads a line, regardless of length.
 int readLine(byte[] b, int offset, int length)
          This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read
 void reset()
          This method makes a call to the reset() method of the underlying InputStream
 
Methods inherited from class java.io.InputStream
skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

inputStream

protected java.io.InputStream inputStream
The underlying InputStream used by this class


buffer

protected byte[] buffer
The byte array used to hold buffered data


bufferOffset

protected int bufferOffset
The current offset we're at in the buffer's byte array


bufferSize

protected int bufferSize
The size of the byte array buffer


bufferLength

protected int bufferLength
The number of bytes read from the underlying InputStream that are in the buffer


totalLength

protected int totalLength
The total number of bytes read so far


contentLength

protected long contentLength
The content length of the multipart data


maxSize

protected long maxSize
The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length


contentLengthMet

protected boolean contentLengthMet
Whether or not bytes up to the Content-Length have been read


maxLengthMet

protected boolean maxLengthMet
Whether or not bytes up to the maximum length have been read

Constructor Detail

BufferedMultipartInputStream

public BufferedMultipartInputStream(java.io.InputStream inputStream,
                                    int bufferSize,
                                    long contentLength,
                                    long maxSize)
                             throws java.io.IOException
Public constructor for this class, just wraps the InputStream given

Parameters:
inputStream - The underlying stream to read from
bufferSize - The size in bytes of the internal buffer
contentLength - The content length for this request
maxSize - The maximum size in bytes that this multipart request can be, or -1 for an unlimited length
Method Detail

available

public int available()
This method returns the number of available bytes left to read in the buffer before it has to be refilled

Overrides:
available in class java.io.InputStream

close

public void close()
           throws java.io.IOException
This method attempts to close the underlying InputStream

Overrides:
close in class java.io.InputStream
java.io.IOException

mark

public void mark(int position)
This method calls on the mark() method of the underlying InputStream

Overrides:
mark in class java.io.InputStream

markSupported

public boolean markSupported()
This method calls on the markSupported() method of the underlying InputStream

Overrides:
markSupported in class java.io.InputStream
Returns:
Whether or not the underlying InputStream supports marking

maxLengthMet

public boolean maxLengthMet()
Returns:
true if the maximum length has been reached, false otherwise

contentLengthMet

public boolean contentLengthMet()
Returns:
true if the content length has been reached, false otherwise

read

public int read()
         throws java.io.IOException
This method returns the next byte in the buffer, and refills it if necessary.

Specified by:
read in class java.io.InputStream
Returns:
The next byte read in the buffer, or -1 if the end of the stream has been reached
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
This method populates the byte array b with data up to b.length bytes

Overrides:
read in class java.io.InputStream
java.io.IOException

read

public int read(byte[] b,
                int offset,
                int length)
         throws java.io.IOException
This method populates the byte array b with data up to length starting at b[offset]

Overrides:
read in class java.io.InputStream
java.io.IOException

readLine

public int readLine(byte[] b,
                    int offset,
                    int length)
             throws java.io.IOException
This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read

java.io.IOException

readLine

public byte[] readLine()
                throws java.io.IOException
This method reads a line, regardless of length.

Returns:
A byte array representing the line.
java.io.IOException

reset

public void reset()
           throws java.io.IOException
This method makes a call to the reset() method of the underlying InputStream

Overrides:
reset in class java.io.InputStream
java.io.IOException

fill

protected void fill()
             throws java.io.IOException
Fills the buffer with data from the underlying inputStream. If it can't fill the entire buffer in one read, it will read as many times as necessary to fill the buffer

java.io.IOException


Copyright © 2000-2003 - Apache Software Foundation