Class FileNioMemData


  • class FileNioMemData
    extends java.lang.Object
    This class contains the data of an in-memory random access file. Data compression using the LZF algorithm is supported as well.
    • Field Detail

      • COMPRESSED_EMPTY_BLOCK

        private static final java.nio.ByteBuffer COMPRESSED_EMPTY_BLOCK
      • LZF_THREAD_LOCAL

        private static final java.lang.ThreadLocal<CompressLZF> LZF_THREAD_LOCAL
      • COMPRESS_OUT_BUF_THREAD_LOCAL

        private static final java.lang.ThreadLocal<byte[]> COMPRESS_OUT_BUF_THREAD_LOCAL
        the output buffer when compressing
      • nameHashCode

        final int nameHashCode
        The hash code of the name.
      • name

        private java.lang.String name
      • compress

        private final boolean compress
      • compressLaterCachePercent

        private final float compressLaterCachePercent
      • length

        private volatile long length
      • buffers

        private java.util.concurrent.atomic.AtomicReference<java.nio.ByteBuffer>[] buffers
      • lastModified

        private long lastModified
      • isReadOnly

        private boolean isReadOnly
      • isLockedExclusive

        private boolean isLockedExclusive
      • sharedLockCount

        private int sharedLockCount
      • rwLock

        private final java.util.concurrent.locks.ReentrantReadWriteLock rwLock
    • Constructor Detail

      • FileNioMemData

        FileNioMemData​(java.lang.String name,
                       boolean compress,
                       float compressLaterCachePercent)
    • Method Detail

      • lockExclusive

        boolean lockExclusive()
        Lock the file in exclusive mode if possible.
        Returns:
        if locking was successful
      • lockShared

        boolean lockShared()
        Lock the file in shared mode if possible.
        Returns:
        if locking was successful
      • unlock

        void unlock()
        Unlock the file.
      • addToCompressLaterCache

        private void addToCompressLaterCache​(int page)
      • expandPage

        private java.nio.ByteBuffer expandPage​(int page)
      • compressPage

        void compressPage​(int page)
        Compress the data in a byte array.
        Parameters:
        page - which page to compress
      • touch

        void touch​(boolean openReadOnly)
        Update the last modified time.
        Parameters:
        openReadOnly - if the file was opened in read-only mode
      • length

        long length()
        Get the file length.
        Returns:
        the length
      • truncate

        void truncate​(long newLength)
        Truncate the file.
        Parameters:
        newLength - the new length
      • changeLength

        private void changeLength​(long len)
      • readWrite

        long readWrite​(long pos,
                       java.nio.ByteBuffer b,
                       int off,
                       int len,
                       boolean write)
        Read or write.
        Parameters:
        pos - the position
        b - the byte array
        off - the offset within the byte array
        len - the number of bytes
        write - true for writing
        Returns:
        the new position
      • setName

        void setName​(java.lang.String name)
        Set the file name.
        Parameters:
        name - the name
      • getName

        java.lang.String getName()
        Get the file name
        Returns:
        the name
      • getLastModified

        long getLastModified()
        Get the last modified time.
        Returns:
        the time
      • canWrite

        boolean canWrite()
        Check whether writing is allowed.
        Returns:
        true if it is
      • setReadOnly

        boolean setReadOnly()
        Set the read-only flag.
        Returns:
        true