Package uk.ac.starlink.fits
Class BlockInput
- java.lang.Object
-
- uk.ac.starlink.fits.BlockInput
-
- All Implemented Interfaces:
BasicInput
- Direct Known Subclasses:
BlockMappedInput,MultiByteBufferInput
public abstract class BlockInput extends java.lang.Object implements BasicInput
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 Modifier Constructor Description protectedBlockInput(int nblock)Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract java.nio.ByteBufferacquireBlock(int iblock)Obtains a buffer corresponding to a named block of the stream.voidclose()Releases resources belonging to this object.intgetBlockCount()Returns 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.longgetOffset()Returns 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.doublereadDouble()Reads an 8-byte floating point value from the stream.floatreadFloat()Reads 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.shortreadShort()Reads 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.
-
-
-
Method Detail
-
readByte
public byte readByte() throws java.io.IOExceptionDescription copied from interface:BasicInputReads a byte from the stream. The current position is advanced.- Specified by:
readBytein interfaceBasicInput- Returns:
- byte value
- Throws:
java.io.IOException
-
readShort
public short readShort() throws java.io.IOExceptionDescription copied from interface:BasicInputReads a 2-byte integer from the stream. The current position is advanced.- Specified by:
readShortin interfaceBasicInput- Returns:
- short value
- Throws:
java.io.IOException
-
readInt
public int readInt() throws java.io.IOExceptionDescription copied from interface:BasicInputReads a 4-byte integer from the stream. The current position is advanced.- Specified by:
readIntin interfaceBasicInput- Returns:
- int value
- Throws:
java.io.IOException
-
readLong
public long readLong() throws java.io.IOExceptionDescription copied from interface:BasicInputReads an 8-byte integer from the stream. The current position is advanced.- Specified by:
readLongin interfaceBasicInput- Returns:
- long value
- Throws:
java.io.IOException
-
readFloat
public float readFloat() throws java.io.IOExceptionDescription 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:
java.io.IOException
-
readDouble
public double readDouble() throws java.io.IOExceptionDescription 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:
java.io.IOException
-
readBytes
public void readBytes(byte[] bbuf) throws java.io.IOExceptionDescription 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:
java.io.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
protected abstract java.nio.ByteBuffer acquireBlock(int iblock) throws java.io.IOExceptionObtains 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:
java.io.IOException
-
seek
public void seek(long offset) throws java.io.IOExceptionDescription copied from interface:BasicInputMoves the current position of this stream to a given byte offset (optional operation).- Specified by:
seekin interfaceBasicInput- Throws:
java.io.IOException
-
getOffset
public long getOffset()
Description copied from interface:BasicInputReturns the curent position in this stream (optional operation).- Specified by:
getOffsetin interfaceBasicInput
-
skip
public void skip(long nbyte) throws java.io.IOExceptionDescription 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:
java.io.IOException
-
getBlockCount
public int getBlockCount()
Returns the number of mapped blocks used.- Returns:
- block count
-
-