Class MimeBoundaryInputStream

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

    public class MimeBoundaryInputStream
    extends LineReaderInputStream
    Stream that constrains itself to a single MIME body part. After the stream ends (i.e. read() returns -1) isLastPart() can be used to determine if a final boundary has been seen or not.
    • Field Detail

      • boundary

        private final byte[] boundary
      • strict

        private final boolean strict
      • eof

        private boolean eof
      • limit

        private int limit
      • atBoundary

        private boolean atBoundary
      • boundaryLen

        private int boundaryLen
      • lastPart

        private boolean lastPart
      • completed

        private boolean completed
      • initialLength

        private int initialLength
        Store the first buffer length. Used to distinguish between an empty preamble and no preamble.
    • Constructor Detail

      • MimeBoundaryInputStream

        public MimeBoundaryInputStream​(BufferedLineReaderInputStream inbuffer,
                                       java.lang.String boundary,
                                       boolean strict)
                                throws java.io.IOException
        Creates a new MimeBoundaryInputStream.
        Parameters:
        inbuffer - The underlying stream.
        boundary - Boundary string (not including leading hyphens).
        Throws:
        java.lang.IllegalArgumentException - when boundary is too long
        java.io.IOException
      • MimeBoundaryInputStream

        public MimeBoundaryInputStream​(BufferedLineReaderInputStream inbuffer,
                                       java.lang.String boundary)
                                throws java.io.IOException
        Creates a new MimeBoundaryInputStream.
        Parameters:
        inbuffer - The underlying stream.
        boundary - Boundary string (not including leading hyphens).
        Throws:
        java.lang.IllegalArgumentException - when boundary is too long
        java.io.IOException
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Closes the underlying stream.
        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 - on I/O errors.
      • markSupported

        public boolean markSupported()
        Overrides:
        markSupported in class java.io.FilterInputStream
        See Also:
        InputStream.markSupported()
      • readAllowed

        public boolean readAllowed()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • read

        public int read()
                 throws java.io.IOException
        Overrides:
        read in class java.io.FilterInputStream
        Throws:
        java.io.IOException
        See Also:
        InputStream.read()
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Overrides:
        read in class java.io.FilterInputStream
        Throws:
        java.io.IOException
      • readLine

        public int readLine​(ByteArrayBuffer dst)
                     throws java.io.IOException
        Description copied from class: LineReaderInputStream
        Reads one line of text into the given ByteArrayBuffer.
        Specified by:
        readLine in class LineReaderInputStream
        Parameters:
        dst - Destination
        Returns:
        number of bytes copied or -1 if the end of the stream has been reached.
        Throws:
        MaxLineLimitException - if the line exceeds a limit on the line length imposed by a subclass.
        java.io.IOException - in case of an I/O error.
      • verifyEndOfStream

        private void verifyEndOfStream()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • endOfStream

        private boolean endOfStream()
      • hasData

        private boolean hasData()
      • fillBuffer

        private int fillBuffer()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • isEmptyStream

        public boolean isEmptyStream()
      • isFullyConsumed

        public boolean isFullyConsumed()
      • calculateBoundaryLen

        private void calculateBoundaryLen()
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • skipBoundary

        private void skipBoundary()
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • isLastPart

        public boolean isLastPart()
      • eof

        public boolean eof()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • unread

        public boolean unread​(ByteArrayBuffer buf)
        Description copied from class: LineReaderInputStream
        Tries to unread the last read line. Implementation may refuse to unread a new buffer until the previous unread one has been competely consumed. Implementations will directly use the byte array backed by buf, so make sure to not alter it anymore once this method has been called.
        Specified by:
        unread in class LineReaderInputStream
        Returns:
        true if the unread has been succesfull.