Class RandomAccessReadMemoryMappedFile

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

    public class RandomAccessReadMemoryMappedFile
    extends java.lang.Object
    implements RandomAccessRead
    An implementation of the RandomAccess interface backed by a memory mapped file channel. The whole file is mapped to memory and the max size is limited to Integer.MAX_VALUE.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.nio.channels.FileChannel fileChannel  
      private java.nio.ByteBuffer mappedByteBuffer  
      private long size  
      private java.util.function.Consumer<? super java.nio.ByteBuffer> unmapper  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void checkClosed()
      Ensure that the RandomAccessReadMemoryMappedFile is not closed
      void close()
      RandomAccessReadView createView​(long startPosition, long streamLength)
      Creates a random access read view starting at the given position with the given length.
      long getPosition()
      Returns offset of next byte to be returned by a read method.
      boolean isClosed()
      Returns true if this source has been closed.
      boolean isEOF()
      A simple test to see if we are at the end of the data.
      long length()
      The total number of bytes that are available.
      int read()
      Read a single byte of data.
      int read​(byte[] b, int offset, int length)
      Read a buffer of data.
      void seek​(long position)
      Seek to a position in the data.
      • Methods inherited from class java.lang.Object

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

      • mappedByteBuffer

        private java.nio.ByteBuffer mappedByteBuffer
      • size

        private final long size
      • fileChannel

        private final java.nio.channels.FileChannel fileChannel
      • unmapper

        private final java.util.function.Consumer<? super java.nio.ByteBuffer> unmapper
    • Constructor Detail

      • RandomAccessReadMemoryMappedFile

        public RandomAccessReadMemoryMappedFile​(java.lang.String filename)
                                         throws java.io.IOException
        Create a random access memory mapped file instance for the file with the given name.
        Parameters:
        filename - the filename of the file to be read
        Throws:
        java.io.IOException - If there is an IO error opening the file.
      • RandomAccessReadMemoryMappedFile

        public RandomAccessReadMemoryMappedFile​(java.io.File file)
                                         throws java.io.IOException
        Create a random access memory mapped file instance for the given file.
        Parameters:
        file - the file to be read
        Throws:
        java.io.IOException - If there is an IO error opening the file.
      • RandomAccessReadMemoryMappedFile

        public RandomAccessReadMemoryMappedFile​(java.nio.file.Path path)
                                         throws java.io.IOException
        Create a random access memory mapped file instance using the given path.
        Parameters:
        path - path of the file to be read.
        Throws:
        java.io.IOException - If there is an IO error opening the file.
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • seek

        public void seek​(long position)
                  throws java.io.IOException
        Seek to a position in the data.
        Specified by:
        seek in interface RandomAccessRead
        Parameters:
        position - The position to seek to.
        Throws:
        java.io.IOException - If there is an error while seeking.
      • getPosition

        public long getPosition()
                         throws java.io.IOException
        Returns offset of next byte to be returned by a read method.
        Specified by:
        getPosition in interface RandomAccessRead
        Returns:
        offset of next byte which will be returned with next RandomAccessRead.read() (if no more bytes are left it returns a value >= length of source)
        Throws:
        java.io.IOException - If there was an error while getting the current position
      • read

        public int read()
                 throws java.io.IOException
        Read a single byte of data.
        Specified by:
        read in interface RandomAccessRead
        Returns:
        The byte of data that is being read.
        Throws:
        java.io.IOException - If there is an error while reading the data.
      • read

        public int read​(byte[] b,
                        int offset,
                        int length)
                 throws java.io.IOException
        Read a buffer of data.
        Specified by:
        read in interface RandomAccessRead
        Parameters:
        b - The buffer to write the data to.
        offset - Offset into the buffer to start writing.
        length - The amount of data to attempt to read.
        Returns:
        The number of bytes that were actually read.
        Throws:
        java.io.IOException - If there was an error while reading the data.
      • length

        public long length()
                    throws java.io.IOException
        The total number of bytes that are available.
        Specified by:
        length in interface RandomAccessRead
        Returns:
        The number of bytes available.
        Throws:
        java.io.IOException - If there is an IO error while determining the length of the data stream.
      • checkClosed

        private void checkClosed()
                          throws java.io.IOException
        Ensure that the RandomAccessReadMemoryMappedFile is not closed
        Throws:
        java.io.IOException - If RandomAccessBuffer already closed
      • isClosed

        public boolean isClosed()
        Returns true if this source has been closed.
        Specified by:
        isClosed in interface RandomAccessRead
        Returns:
        true if the source has been closed
      • isEOF

        public boolean isEOF()
                      throws java.io.IOException
        A simple test to see if we are at the end of the data.
        Specified by:
        isEOF in interface RandomAccessRead
        Returns:
        true if we are at the end of the data.
        Throws:
        java.io.IOException - If there is an error reading the next byte.
      • createView

        public RandomAccessReadView createView​(long startPosition,
                                               long streamLength)
        Description copied from interface: RandomAccessRead
        Creates a random access read view starting at the given position with the given length.
        Specified by:
        createView in interface RandomAccessRead
        Parameters:
        startPosition - start position within the underlying random access read
        streamLength - stream length
        Returns:
        the random access read view