Package uk.ac.starlink.fits
Class BlockMappedInput
java.lang.Object
uk.ac.starlink.fits.BlockInput
uk.ac.starlink.fits.BlockMappedInput
- All Implemented Interfaces:
BasicInput
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 Summary
FieldsModifier and TypeFieldDescriptionstatic final long
Default time in milliseconds after which buffers will be discarded. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
This does not close the BlockManager.static BlockMappedInput
createInput
(BlockManager blockManager, boolean caching) Constructs an instance that does or does not support caching.static BlockMappedInput
createInput
(BlockManager blockManager, long expiryMillis) Constructs an instance with explicit configuration.long
getBlockOffset
(int iblock, int offsetInBlock) Returns the offset into this stream corresponding to a given block index and offset into that block.int[]
getBlockPos
(long offset) Returns the block location of a given byte offset.Methods inherited from class uk.ac.starlink.fits.BlockInput
acquireBlock, getBlockCount, getOffset, isRandom, readByte, readBytes, readDouble, readFloat, readInt, readLong, readShort, seek, skip
-
Field Details
-
DEFAULT_EXPIRYMILLIS
public static final long DEFAULT_EXPIRYMILLISDefault time in milliseconds after which buffers will be discarded.- See Also:
-
-
Constructor Details
-
BlockMappedInput
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 classBlockInput
- 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 classBlockInput
- Parameters:
iblock
- block indexoffsetInBlock
- offset into that block- Returns:
- offset into stream
-
close
public void close()This does not close the BlockManager.- Specified by:
close
in interfaceBasicInput
- Overrides:
close
in classBlockInput
-
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 blockscaching
- 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. TheexpiryMillis
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 blocksexpiryMillis
- buffer caching period in milliseconds- Returns:
- new instance
- Throws:
IOException
-