Class SimpleNioBuf

java.lang.Object
uk.ac.bristol.star.cdf.record.SimpleNioBuf
All Implemented Interfaces:
Buf

public class SimpleNioBuf extends Object implements Buf
Buf implementation based on a single NIO ByteBuffer. This works fine as long as it doesn't need to be more than 2^31 bytes (2Gb), which is the maximum length of a ByteBuffer.
Since:
18 Jun 2013
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    SimpleNioBuf(ByteBuffer byteBuf, boolean isBit64, boolean isBigendian)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    createInputStream(long offset)
    Returns an input stream consisting of all the bytes in this buf starting from the given offset.
    fillNewBuf(long count, InputStream in)
    Creates a new Buf of a given length populated from a given input stream.
    long
    Returns the extent of this buf in bytes.
    boolean
    Determines the data encoding of this buf.
    boolean
    Determines the 64bit-ness of this buf.
    readAsciiString(Pointer ptr, int nbyte)
    Reads a fixed number of bytes interpreting them as ASCII characters and returns the result as a string.
    void
    readDataBytes(long offset, int count, byte[] array)
    Reads a sequence of byte values from this buf into an array.
    void
    readDataDoubles(long offset, int count, double[] array)
    Reads a sequence of double values from this buf into an array.
    void
    readDataFloats(long offset, int count, float[] array)
    Reads a sequence of float values from this buf into an array.
    void
    readDataInts(long offset, int count, int[] array)
    Reads a sequence of int values from this buf into an array.
    void
    readDataLongs(long offset, int count, long[] array)
    Reads a sequence of long integer values from this buf into an array.
    void
    readDataShorts(long offset, int count, short[] array)
    Reads a sequence of short values from this buf into an array.
    int
    Reads a signed big-endian 4-byte integer from the pointer position.
    long
    Reads a file offset or size from the pointer position.
    int
    Reads a single byte from the pointer position, returning a value in the range 0..255.
    void
    setBit64(boolean isBit64)
    Sets the 64bit-ness of this buf.
    void
    setEncoding(boolean bigend)
    Sets the encoding for reading numeric values as performed by the readData* methods.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SimpleNioBuf

      public SimpleNioBuf(ByteBuffer byteBuf, boolean isBit64, boolean isBigendian)
      Constructor.
      Parameters:
      byteBuf - NIO byte buffer containing the byte data
      isBit64 - 64bit-ness of this buf
      isBigendian - true for big-endian, false for little-endian
  • Method Details

    • getLength

      public long getLength()
      Description copied from interface: Buf
      Returns the extent of this buf in bytes.
      Specified by:
      getLength in interface Buf
      Returns:
      buffer length
    • readUnsignedByte

      public int readUnsignedByte(Pointer ptr)
      Description copied from interface: Buf
      Reads a single byte from the pointer position, returning a value in the range 0..255. Pointer position is moved on appropriately.
      Specified by:
      readUnsignedByte in interface Buf
      Parameters:
      ptr - pointer
      Returns:
      byte value
    • readInt

      public int readInt(Pointer ptr)
      Description copied from interface: Buf
      Reads a signed big-endian 4-byte integer from the pointer position. Pointer position is moved on appropriately.
      Specified by:
      readInt in interface Buf
      Parameters:
      ptr - pointer
      Returns:
      integer value
    • readOffset

      public long readOffset(Pointer ptr)
      Description copied from interface: Buf
      Reads a file offset or size from the pointer position. This is a signed big-endian integer, occupying either 4 or 8 bytes according to the return value of Buf.isBit64(). Pointer position is moved on appropriately.
      Specified by:
      readOffset in interface Buf
      Returns:
      buffer size or offset value
    • readAsciiString

      public String readAsciiString(Pointer ptr, int nbyte)
      Description copied from interface: Buf
      Reads a fixed number of bytes interpreting them as ASCII characters and returns the result as a string. If a character 0x00 appears before nbyte bytes have been read, it is taken as the end of the string. Pointer position is moved on appropriately.
      Specified by:
      readAsciiString in interface Buf
      Parameters:
      ptr - pointer
      nbyte - maximum number of bytes in string
      Returns:
      ASCII string
    • setBit64

      public void setBit64(boolean isBit64)
      Description copied from interface: Buf
      Sets the 64bit-ness of this buf. This determines whether readOffset reads 4- or 8-byte values.

      This method should be called before the readOffset method is invoked.

      Specified by:
      setBit64 in interface Buf
      Parameters:
      isBit64 - true for 8-byte offsets, false for 4-byte offsets
    • setEncoding

      public void setEncoding(boolean bigend)
      Description copied from interface: Buf
      Sets the encoding for reading numeric values as performed by the readData* methods.

      As currently specified, there are only two possibiliies, Big-Endian and Little-Endian. Interface and implementation would need to be reworked somewhat to accommodate the (presumably, rarely seen in this day and age) D_FLOAT and G_FLOAT encodings supported by the CDF standard.

      This method should be called before any of the readData* methods are invoked.

      Specified by:
      setEncoding in interface Buf
      Parameters:
      bigend - true for big-endian, false for little-endian
    • isBigendian

      public boolean isBigendian()
      Description copied from interface: Buf
      Determines the data encoding of this buf.
      Specified by:
      isBigendian in interface Buf
      Returns:
      true for big-endian, false for little-endian
    • isBit64

      public boolean isBit64()
      Description copied from interface: Buf
      Determines the 64bit-ness of this buf. This determines whether readOffset reads 4- or 8-byte values.
      Specified by:
      isBit64 in interface Buf
      Returns:
      true for 8-byte offsets, false for 4-byte offsets
    • readDataBytes

      public void readDataBytes(long offset, int count, byte[] array)
      Description copied from interface: Buf
      Reads a sequence of byte values from this buf into an array.
      Specified by:
      readDataBytes in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of byte values to read
      array - array to receive values, starting at array element 0
    • readDataShorts

      public void readDataShorts(long offset, int count, short[] array)
      Description copied from interface: Buf
      Reads a sequence of short values from this buf into an array.
      Specified by:
      readDataShorts in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of short values to read
      array - array to receive values, starting at array element 0
    • readDataInts

      public void readDataInts(long offset, int count, int[] array)
      Description copied from interface: Buf
      Reads a sequence of int values from this buf into an array.
      Specified by:
      readDataInts in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of int values to read
      array - array to receive values, starting at array element 0
    • readDataLongs

      public void readDataLongs(long offset, int count, long[] array)
      Description copied from interface: Buf
      Reads a sequence of long integer values from this buf into an array.
      Specified by:
      readDataLongs in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of long values to read
      array - array to receive values, starting at array element 0
    • readDataFloats

      public void readDataFloats(long offset, int count, float[] array)
      Description copied from interface: Buf
      Reads a sequence of float values from this buf into an array.
      Specified by:
      readDataFloats in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of float values to read
      array - array to receive values, starting at array element 0
    • readDataDoubles

      public void readDataDoubles(long offset, int count, double[] array)
      Description copied from interface: Buf
      Reads a sequence of double values from this buf into an array.
      Specified by:
      readDataDoubles in interface Buf
      Parameters:
      offset - position sequence start in this buffer in bytes
      count - number of double values to read
      array - array to receive values, starting at array element 0
    • createInputStream

      public InputStream createInputStream(long offset)
      Description copied from interface: Buf
      Returns an input stream consisting of all the bytes in this buf starting from the given offset.
      Specified by:
      createInputStream in interface Buf
      Parameters:
      offset - position of first byte in buf that will appear in the returned stream
      Returns:
      input stream
    • fillNewBuf

      public Buf fillNewBuf(long count, InputStream in) throws IOException
      Description copied from interface: Buf
      Creates a new Buf of a given length populated from a given input stream. The new buf object must have the same data encoding and 64bit-ness as this one.
      Specified by:
      fillNewBuf in interface Buf
      Parameters:
      count - size of new buffer in bytes
      in - input stream capable of supplying (at least) count bytes
      Returns:
      new buffer of length count filled with bytes from in
      Throws:
      IOException