Class RAFolderInputStream

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

    public class RAFolderInputStream
    extends RAInputStream
    RAInputStream implementation for folder based report archive
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      Returns the number of bytes that can be read (or skipped over) from this random access input stream without blocking by the next caller of a method for this input stream.
      void close()
      Close the stream
      java.lang.String getName()  
      long getOffset()  
      long getStreamLength()  
      long length()  
      int read()
      The same behavior as InputStream.read().
      Reads the next byte of data from the input stream.
      int read​(byte[] b, int off, int len)
      The same behavior as InputStream.read(byte b[], int off, int len ).
      Reads up to len bytes of data from the input stream into an array of bytes.
      void readFully​(byte[] b, int off, int len)
      The same behavior as RandomAccessFile.readFully(byte b[], int off, int len) Reads exactly len bytes from this file into the byte array, starting at the current file pointer.
      int readInt()
      Instead of calling randomAccessFile.readInt, we implement it in a better way (much better performace.) The external behavior is the same as RandomAccessFile.readInt().
      long readLong()
      Reads a signed 64-bit integer from this file.
      void refresh()  
      void seek​(long localPos)
      Move the file pointer to the new location in the stream
      • Methods inherited from class java.io.InputStream

        mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RAFolderInputStream

        public RAFolderInputStream​(java.io.File file)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • RAFolderInputStream

        public RAFolderInputStream​(java.util.HashSet<RAFolderInputStream> manager,
                                   java.io.File file)
                            throws java.io.IOException
        Parameters:
        file - - a regular file (i.e. stream) in the folder
        Throws:
        java.io.FileNotFoundException
        java.io.IOException
    • Method Detail

      • getName

        public java.lang.String getName()
      • refresh

        public void refresh()
                     throws java.io.IOException
        Specified by:
        refresh in class RAInputStream
        Throws:
        java.io.IOException
      • read

        public int read()
                 throws java.io.IOException
        The same behavior as InputStream.read().
        Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

        A subclass must provide an implementation of this method.

        Specified by:
        read in class java.io.InputStream
        Returns:
        the next byte of data, or -1 if the end of the stream is reached.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        The same behavior as InputStream.read(byte b[], int off, int len ).
        Reads up to len bytes of data from the input stream into an array of bytes. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

        A subclass must provide an implementation of this method.

        Overrides:
        read in class java.io.InputStream
        Returns:
        the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached
        Throws:
        java.io.IOException - if an I/O error occurs.
      • readInt

        public int readInt()
                    throws java.io.IOException
        Instead of calling randomAccessFile.readInt, we implement it in a better way (much better performace.) The external behavior is the same as RandomAccessFile.readInt().
        Reads a signed 32-bit integer from this file. This method reads 4 bytes from the file, starting at the current file pointer. If the bytes read, in order, are b1, b2, b3, and b4, where 0 <= b1, b2, b3, b4 <= 255, then the result is equal to:
         (b1 << 24) | (b2 << 16) + (b3 << 8) + b4
         

        This method blocks until the four bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readInt in class RAInputStream
        Returns:
        the next four bytes of this stream, interpreted as an int.
        Throws:
        java.io.EOFException - if this stream reaches the end before reading four bytes.
        java.io.IOException - if an I/O error occurs.
      • readLong

        public long readLong()
                      throws java.io.IOException
        Reads a signed 64-bit integer from this file. This method reads eight bytes from the file, starting at the current file pointer. If the bytes read, in order, are b1, b2, b3, b4, b5, b6, b7, and b8, where:
             0 <= b1, b2, b3, b4, b5, b6, b7, b8 <=255,
         

        then the result is equal to:

         ((long) b1 << 56) + ((long) b2 << 48) + ((long) b3 << 40) + ((long) b4 << 32) + ((long) b5 << 24)
                        + ((long) b6 << 16) + ((long) b7 << 8) + b8
         

        This method blocks until the eight bytes are read, the end of the stream is detected, or an exception is thrown.

        Specified by:
        readLong in class RAInputStream
        Returns:
        the next eight bytes of this file, interpreted as a long.
        Throws:
        java.io.EOFException - if this file reaches the end before reading eight bytes.
        java.io.IOException - if an I/O error occurs.
      • readFully

        public final void readFully​(byte[] b,
                                    int off,
                                    int len)
                             throws java.io.IOException
        The same behavior as RandomAccessFile.readFully(byte b[], int off, int len) Reads exactly len bytes from this file into the byte array, starting at the current file pointer. This method reads repeatedly from the file until the requested number of bytes are read. This method blocks until the requested number of bytes are read, the end of the stream is detected, or an exception is thrown.
        Specified by:
        readFully in class RAInputStream
        Parameters:
        b - the buffer into which the data is read.
        off - the start offset of the data.
        len - the number of bytes to read.
        Throws:
        java.io.EOFException - if this file reaches the end before reading all the bytes.
        java.io.IOException - if an I/O error occurs.
      • getStreamLength

        public long getStreamLength()
                             throws java.io.IOException
        Returns:
        the length of the stream
        Throws:
        java.io.IOException
      • seek

        public void seek​(long localPos)
                  throws java.io.IOException
        Move the file pointer to the new location in the stream
        Specified by:
        seek in class RAInputStream
        Parameters:
        localPos - - the new local postion in the stream. The localPos starts from 0.
        Throws:
        java.io.IOException
      • getOffset

        public long getOffset()
                       throws java.io.IOException
        Specified by:
        getOffset in class RAInputStream
        Throws:
        java.io.IOException
      • length

        public long length()
                    throws java.io.IOException
        Specified by:
        length in class RAInputStream
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Close the stream
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Overrides:
        close in class java.io.InputStream
        Throws:
        java.io.IOException
      • available

        public int available()
                      throws java.io.IOException
        Description copied from class: RAInputStream
        Returns the number of bytes that can be read (or skipped over) from this random access input stream without blocking by the next caller of a method for this input stream. The next caller might be the same thread or another thread.

        This abstract class is extended by RAFolderInputStream and RAFileInputStream

        The available method returns -1 when no more data because the end of the stream has been reached.

        and returns Integer.MAX_VALUE when bytes of data is larger then Integer.MAX_VALUE.

        Specified by:
        available in class RAInputStream
        Throws:
        java.io.IOException