org.apache.axiom.attachments
Class BoundaryDelimitedStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by org.apache.axiom.attachments.BoundaryDelimitedStream
All Implemented Interfaces:
java.io.Closeable

public class BoundaryDelimitedStream
extends java.io.FilterInputStream

This class takes the input stream and turns it multiple streams.


Field Summary
protected  byte[] boundary
           
protected static int BOUNDARY_NOT_FOUND
          Field BOUNDARY_NOT_FOUND.
(package private)  int boundaryBufLen
          The boundary length plus crlf.
(package private)  int boundaryLen
          The boundary length.
(package private)  int boundaryPos
          Field boundaryPos.
(package private)  boolean closed
          The stream has been closed.
(package private)  boolean eos
          eof has been detected.
(package private)  java.io.InputStream is
          The source input stream.
(package private) static boolean isDebugEnabled
          Field isDebugEnabled.
protected static org.apache.commons.logging.Log log
          The Log that this class should log all events to.
(package private)  byte[] readbuf
          The buffer we are reading.
(package private)  int readBufEnd
          The number of bytes in array.
(package private)  int readBufPos
          Where we have read so far in the stream.
(package private)  int readbufsz
          Minimum to read at one time.
private  int[] skip
           
(package private) static int streamCount
          The number of streams produced.
protected  int streamNo
          Field streamNo.
(package private)  boolean theEnd
          There are no more streams left.
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
protected BoundaryDelimitedStream(BoundaryDelimitedStream prev, int readbufsz)
          Constructor to create the next stream from the previous one.
(package private) BoundaryDelimitedStream(java.io.InputStream is, byte[] boundary, int readbufsz)
          Create a new boundary stream.
 
Method Summary
 int available()
           
protected  int boundaryPosition(byte[] searchbuf, int start, int end)
          Read from the boundary delimited stream.
private  int boundarySearch(byte[] text, int start, int end)
           
 void close()
          Closes the stream.
protected  void finalClose()
          Close the underlying stream and remove all references to it.
 BoundaryDelimitedStream getNextStream()
          Gets the next stream.
protected  BoundaryDelimitedStream getNextStream(int readbufsz)
          Gets the next stream.
 void mark(int readlimit)
          mark the stream.
 boolean markSupported()
          markSupported return false;
protected static int newStreamNo()
          Signal that a new stream has been created.
static void printarry(byte[] b, int start, int end)
          Method printarry
 int read()
          Read from the boundary delimited stream.
 int read(byte[] b)
          Read from the boundary delimited stream.
 int read(byte[] b, int off, int len)
          Read from the boundary delimited stream.
private  int readFromStream(byte[] b)
           
private  int readFromStream(byte[] b, int start, int length)
           
 void reset()
          reset the stream.
 
Methods inherited from class java.io.FilterInputStream
skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static org.apache.commons.logging.Log log
The Log that this class should log all events to.


boundary

protected byte[] boundary

boundaryLen

int boundaryLen
The boundary length.


boundaryBufLen

int boundaryBufLen
The boundary length plus crlf.


is

java.io.InputStream is
The source input stream.


closed

boolean closed
The stream has been closed.


eos

boolean eos
eof has been detected.


theEnd

boolean theEnd
There are no more streams left.


readbufsz

int readbufsz
Minimum to read at one time.


readbuf

byte[] readbuf
The buffer we are reading.


readBufPos

int readBufPos
Where we have read so far in the stream.


readBufEnd

int readBufEnd
The number of bytes in array.


BOUNDARY_NOT_FOUND

protected static final int BOUNDARY_NOT_FOUND
Field BOUNDARY_NOT_FOUND.

See Also:
Constant Field Values

boundaryPos

int boundaryPos
Field boundaryPos.


streamCount

static int streamCount
The number of streams produced.


streamNo

protected int streamNo
Field streamNo.


isDebugEnabled

static boolean isDebugEnabled
Field isDebugEnabled.


skip

private int[] skip
Constructor Detail

BoundaryDelimitedStream

protected BoundaryDelimitedStream(BoundaryDelimitedStream prev,
                                  int readbufsz)
                           throws java.io.IOException
Constructor to create the next stream from the previous one.

Parameters:
prev - the previous stream
readbufsz - how many bytes to make the read buffer
Throws:
java.io.IOException - if there was a problem reading data from prev

BoundaryDelimitedStream

BoundaryDelimitedStream(java.io.InputStream is,
                        byte[] boundary,
                        int readbufsz)
                  throws OMException
Create a new boundary stream.

Parameters:
is -
boundary - is the boundary that separates the individual streams.
readbufsz - lets you have some control over the amount of buffering. by buffering you can some effiency in searching.
Throws:
OMException
Method Detail

newStreamNo

protected static int newStreamNo()
Signal that a new stream has been created.


getNextStream

public BoundaryDelimitedStream getNextStream()
                                      throws java.io.IOException
Gets the next stream. From the previous using the same buffer size to read.

Returns:
the boundary delmited stream, null if there are no more streams.
Throws:
java.io.IOException - if there was an error loading the data for the next stream

getNextStream

protected BoundaryDelimitedStream getNextStream(int readbufsz)
                                         throws java.io.IOException
Gets the next stream. From the previous using new buffer reading size.

Parameters:
readbufsz -
Returns:
the boundary delmited stream, null if there are no more streams.
Throws:
java.io.IOException - if there was an error loading the data for the next stream

readFromStream

private int readFromStream(byte[] b)
                    throws java.io.IOException
Throws:
java.io.IOException

readFromStream

private int readFromStream(byte[] b,
                           int start,
                           int length)
                    throws java.io.IOException
Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Read from the boundary delimited stream.

Overrides:
read in class java.io.FilterInputStream
Parameters:
b - is the array to read into.
off - is the offset
len -
Returns:
the number of bytes read. -1 if endof stream.
Throws:
java.io.IOException

read

public int read(byte[] b)
         throws java.io.IOException
Read from the boundary delimited stream.

Overrides:
read in class java.io.FilterInputStream
Parameters:
b - is the array to read into. Read as much as possible into the size of this array.
Returns:
the number of bytes read. -1 if endof stream.
Throws:
java.io.IOException

read

public int read()
         throws java.io.IOException
Read from the boundary delimited stream.

Overrides:
read in class java.io.FilterInputStream
Returns:
The byte read, or -1 if endof stream.
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Closes the stream.

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.FilterInputStream
Throws:
java.io.IOException

mark

public void mark(int readlimit)
mark the stream. This is not supported.

Overrides:
mark in class java.io.FilterInputStream
Parameters:
readlimit -

reset

public void reset()
           throws java.io.IOException
reset the stream. This is not supported.

Overrides:
reset in class java.io.FilterInputStream
Throws:
java.io.IOException

markSupported

public boolean markSupported()
markSupported return false;

Overrides:
markSupported in class java.io.FilterInputStream

available

public int available()
              throws java.io.IOException
Overrides:
available in class java.io.FilterInputStream
Throws:
java.io.IOException

boundaryPosition

protected int boundaryPosition(byte[] searchbuf,
                               int start,
                               int end)
                        throws java.io.IOException
Read from the boundary delimited stream.

Parameters:
searchbuf - buffer to read from
start - starting index
end - ending index
Returns:
The position of the boundary. Detects the end of the source stream.
Throws:
java.io.IOException - if there was an error manipulating the underlying stream

boundarySearch

private int boundarySearch(byte[] text,
                           int start,
                           int end)

finalClose

protected void finalClose()
                   throws java.io.IOException
Close the underlying stream and remove all references to it.

Throws:
java.io.IOException - if the stream could not be closed

printarry

public static void printarry(byte[] b,
                             int start,
                             int end)
Method printarry

Parameters:
b -
start -
end -