Class BlockMappedInput

java.lang.Object
uk.ac.starlink.fits.BlockInput
uk.ac.starlink.fits.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 Details

    • DEFAULT_EXPIRYMILLIS

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

    • BlockMappedInput

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

    • 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 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:
      IOException
    • createInput

      public static BlockMappedInput createInput(BlockManager blockManager, long expiryMillis) throws 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:
      IOException