Class BlockInput
java.lang.Object
uk.ac.starlink.fits.BlockInput
- All Implemented Interfaces:
BasicInput
- Direct Known Subclasses:
BlockMappedInput, MultiByteBufferInput
Partial random-access BasicInput implementation based on
a set of ByteBuffers. These may be obtained eagerly or lazily,
as defined by the implementation.
- Since:
- 18 Mar 2021
- Author:
- Mark Taylor
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract ByteBufferacquireBlock(int iblock) Obtains a buffer corresponding to a named block of the stream.voidclose()Releases resources belonging to this object.intReturns the number of mapped blocks used.abstract longgetBlockOffset(int iblock, int offsetInBlock) Returns the offset into this stream corresponding to a given block index and offset into that block.abstract int[]getBlockPos(long offset) Returns the block location of a given byte offset.longReturns the curent position in this stream (optional operation).booleanisRandom()Indicates whether this object supports random access.bytereadByte()Reads a byte from the stream.voidreadBytes(byte[] bbuf) Reads bytes into an array from the stream.doubleReads an 8-byte floating point value from the stream.floatReads a 4-byte floating point value from the stream.intreadInt()Reads a 4-byte integer from the stream.longreadLong()Reads an 8-byte integer from the stream.shortReads a 2-byte integer from the stream.voidseek(long offset) Moves the current position of this stream to a given byte offset (optional operation).voidskip(long nbyte) Skips a given number of bytes forwards through the stream.
-
Constructor Details
-
BlockInput
protected BlockInput(int nblock) Constructor.- Parameters:
nblock- number of buffers
-
-
Method Details
-
readByte
Description copied from interface:BasicInputReads a byte from the stream. The current position is advanced.- Specified by:
readBytein interfaceBasicInput- Returns:
- byte value
- Throws:
IOException
-
readShort
Description copied from interface:BasicInputReads a 2-byte integer from the stream. The current position is advanced.- Specified by:
readShortin interfaceBasicInput- Returns:
- short value
- Throws:
IOException
-
readInt
Description copied from interface:BasicInputReads a 4-byte integer from the stream. The current position is advanced.- Specified by:
readIntin interfaceBasicInput- Returns:
- int value
- Throws:
IOException
-
readLong
Description copied from interface:BasicInputReads an 8-byte integer from the stream. The current position is advanced.- Specified by:
readLongin interfaceBasicInput- Returns:
- long value
- Throws:
IOException
-
readFloat
Description copied from interface:BasicInputReads a 4-byte floating point value from the stream. The current position is advanced.- Specified by:
readFloatin interfaceBasicInput- Returns:
- float value
- Throws:
IOException
-
readDouble
Description copied from interface:BasicInputReads an 8-byte floating point value from the stream. The current position is advanced.- Specified by:
readDoublein interfaceBasicInput- Returns:
- double value
- Throws:
IOException
-
readBytes
Description copied from interface:BasicInputReads bytes into an array from the stream. The current position is advanced.- Specified by:
readBytesin interfaceBasicInput- Parameters:
bbuf- array into which the bytes are read; the number of bytes read is the length of the array- Throws:
IOException
-
close
public void close()Description copied from interface:BasicInputReleases resources belonging to this object. Attempts to use it after a call to this method result in undefined behaviour.- Specified by:
closein interfaceBasicInput
-
isRandom
public boolean isRandom()Description copied from interface:BasicInputIndicates whether this object supports random access. The seek and getOffset methods may only be called if this method returns true.- Specified by:
isRandomin interfaceBasicInput- Returns:
- true iff random access is supported
-
getBlockPos
public abstract int[] getBlockPos(long offset) Returns the block location of a given byte offset.This does the opposite of
getBlockOffset.- Parameters:
offset- offset into this input stream- Returns:
- 2-element array giving [blockIndex, offsetInBlock]
-
getBlockOffset
public abstract long getBlockOffset(int iblock, int offsetInBlock) Returns the offset into this stream corresponding to a given block index and offset into that block.This does the opposite of
getBlockPos.- Parameters:
iblock- block indexoffsetInBlock- offset into that block- Returns:
- offset into stream
-
acquireBlock
Obtains a buffer corresponding to a named block of the stream. The buffer's position must be zero. This method is called whenever a buffer is required which is not the same as the most recently used one.- Parameters:
iblock- block index- Returns:
- byte buffer for given block, positioned at start
- Throws:
IOException
-
seek
Description copied from interface:BasicInputMoves the current position of this stream to a given byte offset (optional operation).- Specified by:
seekin interfaceBasicInput- Throws:
IOException
-
getOffset
public long getOffset()Description copied from interface:BasicInputReturns the curent position in this stream (optional operation).- Specified by:
getOffsetin interfaceBasicInput
-
skip
Description copied from interface:BasicInputSkips a given number of bytes forwards through the stream. An exception is thrown if there are not enough bytes left.- Specified by:
skipin interfaceBasicInput- Parameters:
nbyte- number of bytes to skip- Throws:
IOException
-
getBlockCount
public int getBlockCount()Returns the number of mapped blocks used.- Returns:
- block count
-