Class DimeDelimitedInputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class DimeDelimitedInputStream
    extends java.io.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 Summary

      Fields 
      Modifier and Type Field Description
      protected static org.apache.commons.logging.Log log  
      protected static int streamCount  
      protected java.io.IOException streamInError  
      protected int streamNo  
      • Fields inherited from class java.io.FilterInputStream

        in
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected int _read​(byte[] b, int off, int len)  
      int available()  
      void close()
      Closes the stream.
      protected void finalClose()  
      java.lang.String getContentId()
      Get the id for this stream part.
      DimeTypeNameFormat getDimeTypeNameFormat()  
      java.lang.String getType()
      Get the type, as read from the header.
      void mark​(int readlimit)
      Mark the stream.
      boolean markSupported()  
      protected static int newStreamNo()  
      int read()
      Read from the boundary delimited stream.
      int read​(byte[] b)
      Read from the delimited stream.
      int read​(byte[] b, int off, int len)
      Read from the DIME stream.
      void reset()  
      • Methods inherited from class java.io.FilterInputStream

        skip
      • Methods inherited from class java.io.InputStream

        nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
      • 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
      • streamNo

        protected int streamNo
      • streamInError

        protected java.io.IOException streamInError
      • streamCount

        protected static int streamCount
    • Method Detail

      • newStreamNo

        protected static int newStreamNo()
      • getContentId

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

        public java.lang.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 java.io.IOException
        Read from the DIME stream.
        Overrides:
        read in class java.io.FilterInputStream
        Parameters:
        b - is the array to read into.
        off - is the offset
        Returns:
        the number of bytes read. -1 if endof stream
        Throws:
        java.io.IOException - if data could not be read from the stream
      • _read

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

        public int read​(byte[] b)
                 throws java.io.IOException
        Read from the 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 - if data could not be read from the stream
      • 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 - if there was an error reading the data
      • close

        public void close()
                   throws java.io.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 java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.FilterInputStream
        Throws:
        java.io.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 java.io.FilterInputStream
      • reset

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

        public boolean markSupported()
        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
      • finalClose

        protected void finalClose()
                           throws java.io.IOException
        Throws:
        java.io.IOException