Class RandomAccessSourceFactory


  • public final class RandomAccessSourceFactory
    extends java.lang.Object
    Factory to create RandomAccessSource objects based on various types of sources
    Since:
    5.3.5
    • Field Detail

      • forceRead

        private boolean forceRead
        whether the full content of the source should be read into memory at construction
      • usePlainRandomAccess

        private boolean usePlainRandomAccess
        Whether RandomAccessFile should be used instead of a FileChannel, where applicable
      • exclusivelyLockFile

        private boolean exclusivelyLockFile
        Whether the underlying file should have a RW lock on it or just an R lock
    • Constructor Detail

      • RandomAccessSourceFactory

        public RandomAccessSourceFactory()
        Creates a factory that will give preference to accessing the underling data source using memory mapped files
    • Method Detail

      • setForceRead

        public RandomAccessSourceFactory setForceRead​(boolean forceRead)
        Determines whether the full content of the source will be read into memory
        Parameters:
        forceRead - true if the full content will be read, false otherwise
        Returns:
        this object (this allows chaining of method calls)
      • setUsePlainRandomAccess

        public RandomAccessSourceFactory setUsePlainRandomAccess​(boolean usePlainRandomAccess)
        Determines whether RandomAccessFile should be used as the primary data access mechanism
        Parameters:
        usePlainRandomAccess - whether RandomAccessFile should be used as the primary data access mechanism
        Returns:
        this object (this allows chaining of method calls)
      • createSource

        public RandomAccessSource createSource​(java.io.RandomAccessFile raf)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • createSource

        public RandomAccessSource createSource​(java.net.URL url)
                                        throws java.io.IOException
        Creates a RandomAccessSource based on a URL. The data available at the URL is read into memory and used as the source for the RandomAccessSource
        Parameters:
        url - the url to read from
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException
      • createSource

        public RandomAccessSource createSource​(java.io.InputStream is)
                                        throws java.io.IOException
        Creates a RandomAccessSource based on an InputStream. The full content of the InputStream is read into memory and used as the source for the RandomAccessSource
        Parameters:
        is - the stream to read from
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException
      • createBestSource

        public RandomAccessSource createBestSource​(java.lang.String filename)
                                            throws java.io.IOException
        Creates a RandomAccessSource based on a filename string. If the filename describes a URL, a URL based source is created If the filename describes a file on disk, the contents may be read into memory (if forceRead is true), opened using memory mapped file channel (if usePlainRandomAccess is false), or opened using RandomAccessFile access (if usePlainRandomAccess is true) This call will automatically failover to using RandomAccessFile if the memory map operation fails
        Parameters:
        filename - the name of the file or resource to create the RandomAccessSource for
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException
      • createBestSource

        public RandomAccessSource createBestSource​(java.io.RandomAccessFile raf)
                                            throws java.io.IOException
        Creates a RandomAccessSource based on a RandomAccessFile. The source will be opened using memory mapped file channel (if usePlainRandomAccess is false), or opened using RandomAccessFile access (if usePlainRandomAccess is true) This call will automatically failover to using RandomAccessFile if the memory map operation fails If the source couldn't be opened, the RandomAccessFile will be closed
        Parameters:
        raf - the RandomAccessFile to create a RandomAccessSource for
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException
      • createBestSource

        public RandomAccessSource createBestSource​(java.nio.channels.FileChannel channel)
                                            throws java.io.IOException
        Creates a RandomAccessSource based on memory mapping a file channel. Unless you are explicitly working with a FileChannel already, it is better to use createBestSource(String). If the file is large, it will be opened using a paging strategy.
        Parameters:
        filename - the name of the file or resource to create the RandomAccessSource for
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException
      • createByReadingToMemory

        private RandomAccessSource createByReadingToMemory​(java.lang.String filename)
                                                    throws java.io.IOException
        Creates a new RandomAccessSource by reading the specified file/resource into memory
        Parameters:
        filename - the name of the resource to read
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException - if reading the underling file or stream fails
      • createByReadingToMemory

        private RandomAccessSource createByReadingToMemory​(java.io.InputStream is)
                                                    throws java.io.IOException
        Creates a new RandomAccessSource by reading the specified file/resource into memory
        Parameters:
        is - the name of the resource to read
        Returns:
        the newly created RandomAccessSource
        Throws:
        java.io.IOException - if reading the underling file or stream fails