Class DimeDelimitedInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.axis.attachments.DimeDelimitedInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class DimeDelimitedInputStream extends FilterInputStream
This class takes the input stream and turns it multiple streams. DIME version 0 format
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ---
 | VERSION |B|E|C| TYPE_T| OPT_T |         OPTIONS_LENGTH        |   A
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          ID_LENGTH          |             TYPE_LENGTH         |   Always present 12 bytes
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   even on chunked data.
 |                          DATA_LENGTH                          |   V
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  ---
 |                                                               /
 /                       OPTIONS + PADDING                       /
 /                     (absent for version 0)                    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               /
 /                        ID + PADDING                           /
 /                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               /
 /                        TYPE + PADDING                         /
 /                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                                                               /
 /                        DATA + PADDING                         /
 /                                                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
This implementation of input stream does not support marking operations.
Author:
Rick Rineholt
  • Field Details

    • log

      protected static org.apache.commons.logging.Log log
    • streamNo

      protected int streamNo
    • streamInError

      protected IOException streamInError
    • streamCount

      protected static int streamCount
  • Method Details

    • newStreamNo

      protected static int newStreamNo()
    • getContentId

      public String getContentId()
      Get the id for this stream part.
      Returns:
      the id;
    • getDimeTypeNameFormat

      public DimeTypeNameFormat getDimeTypeNameFormat()
    • getType

      public String getType()
      Get the type, as read from the header.
      Returns:
      the type of this dime
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Read from the DIME stream.
      Overrides:
      read in class FilterInputStream
      Parameters:
      b - is the array to read into.
      off - is the offset
      Returns:
      the number of bytes read. -1 if endof stream
      Throws:
      IOException - if data could not be read from the stream
    • _read

      protected int _read(byte[] b, int off, int len) throws IOException
      Throws:
      IOException
    • read

      public int read(byte[] b) throws IOException
      Read from the delimited stream.
      Overrides:
      read in class 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:
      IOException - if data could not be read from the stream
    • read

      public int read() throws IOException
      Read from the boundary delimited stream.
      Overrides:
      read in class FilterInputStream
      Returns:
      the byte read, or -1 if endof stream
      Throws:
      IOException - if there was an error reading the data
    • close

      public void close() throws IOException
      Closes the stream.

      This will take care of flushing any remaining data to the strea.

      Multiple calls to this method will result in the stream being closed once and then all subsequent calls being ignored.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class FilterInputStream
      Throws:
      IOException - if the stream could not be closed
    • mark

      public void mark(int readlimit)
      Mark the stream. This is not supported.
      Overrides:
      mark in class FilterInputStream
    • reset

      public void reset() throws IOException
      Overrides:
      reset in class FilterInputStream
      Throws:
      IOException
    • markSupported

      public boolean markSupported()
      Overrides:
      markSupported in class FilterInputStream
    • available

      public int available() throws IOException
      Overrides:
      available in class FilterInputStream
      Throws:
      IOException
    • finalClose

      protected void finalClose() throws IOException
      Throws:
      IOException