Class BlockMappedInput

  • All Implemented Interfaces:
    BasicInput

    public abstract class BlockMappedInput
    extends BlockInput
    Random-access BasicInput implementation that maps a given region of a file as a number of byte buffers. The most recently-used buffer is always kept, but there is a choice of what to do with less-recently used ones. Concrete subclasses are provided that either discard them automatically or keep them around for a period of time before discarding them. If and when a buffer is discarded, an attempt is made to release resources.

    Note: DO NOT use an instance of this class from multiple threads - see Unmapper.

    Since:
    2 Dec 2014
    Author:
    Mark Taylor
    • Field Detail

      • DEFAULT_EXPIRYMILLIS

        public static final long DEFAULT_EXPIRYMILLIS
        Default time in milliseconds after which buffers will be discarded.
        See Also:
        Constant Field Values
    • Constructor Detail

      • BlockMappedInput

        protected BlockMappedInput​(BlockManager blockManager)
        Constructor.
        Parameters:
        blockManager - manages file mapping using byte buffers
    • Method Detail

      • getBlockPos

        public int[] getBlockPos​(long offset)
        Description copied from class: BlockInput
        Returns the block location of a given byte offset.

        This does the opposite of getBlockOffset.

        Specified by:
        getBlockPos in class BlockInput
        Parameters:
        offset - offset into this input stream
        Returns:
        2-element array giving [blockIndex, offsetInBlock]
      • getBlockOffset

        public long getBlockOffset​(int iblock,
                                   int offsetInBlock)
        Description copied from class: BlockInput
        Returns the offset into this stream corresponding to a given block index and offset into that block.

        This does the opposite of getBlockPos.

        Specified by:
        getBlockOffset in class BlockInput
        Parameters:
        iblock - block index
        offsetInBlock - offset into that block
        Returns:
        offset into stream
      • close

        public void close()
        This does not close the BlockManager.
        Specified by:
        close in interface BasicInput
        Overrides:
        close in class BlockInput
      • createInput

        public static BlockMappedInput createInput​(BlockManager blockManager,
                                                   boolean caching)
                                            throws java.io.IOException
        Constructs an instance that does or does not support caching. If caching is requested, recently used block buffers are kept around for a while in case they are needed again. If not, as soon as a new block is used, any others are discarded.
        Parameters:
        blockManager - manages buffer in blocks
        caching - whether buffers are cached
        Returns:
        new instance
        Throws:
        java.io.IOException
      • createInput

        public static BlockMappedInput createInput​(BlockManager blockManager,
                                                   long expiryMillis)
                                            throws java.io.IOException
        Constructs an instance with explicit configuration. The expiryMillis parameter controls caching. If zero, the current buffer is discarded as soon as a different one is used. Otherwise, an attempt is made to discard buffers only after they have been unused for a certain number of milliseconds.
        Parameters:
        blockManager - manages buffer in blocks
        expiryMillis - buffer caching period in milliseconds
        Returns:
        new instance
        Throws:
        java.io.IOException