uk.ac.bristol.star.cdf.record
Class WrapperBuf

java.lang.Object
  extended by uk.ac.bristol.star.cdf.record.WrapperBuf
All Implemented Interfaces:
Buf

public class WrapperBuf
extends java.lang.Object
implements Buf

Buf implementation based on an existing Buf instance. All methods are delegated to the base buf.

Since:
18 Jun 2013

Constructor Summary
WrapperBuf(Buf base)
          Constructor.
 
Method Summary
 java.io.InputStream createInputStream(long offset)
          Returns an input stream consisting of all the bytes in this buf starting from the given offset.
 Buf fillNewBuf(long count, java.io.InputStream in)
          Creates a new Buf of a given length populated from a given input stream.
 long getLength()
          Returns the extent of this buf in bytes.
 boolean isBigendian()
          Determines the data encoding of this buf.
 boolean isBit64()
          Determines the 64bit-ness of this buf.
 java.lang.String 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 readInt(Pointer ptr)
          Reads a signed big-endian 4-byte integer from the pointer position.
 long readOffset(Pointer ptr)
          Reads a file offset or size from the pointer position.
 int readUnsignedByte(Pointer ptr)
          Reads a single byte from the pointer position, returning a value in the range 0..255.
 void setBit64(boolean bit64)
          Sets the 64bit-ness of this buf.
 void setEncoding(boolean isBigendian)
          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 Detail

WrapperBuf

public WrapperBuf(Buf base)
Constructor.

Parameters:
base - base buf
Method Detail

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)
                     throws java.io.IOException
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
Throws:
java.io.IOException

readInt

public int readInt(Pointer ptr)
            throws java.io.IOException
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
Throws:
java.io.IOException

readOffset

public long readOffset(Pointer ptr)
                throws java.io.IOException
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
Throws:
java.io.IOException

readAsciiString

public java.lang.String readAsciiString(Pointer ptr,
                                        int nbyte)
                                 throws java.io.IOException
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
Throws:
java.io.IOException

setBit64

public void setBit64(boolean bit64)
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:
bit64 - true for 8-byte offsets, false for 4-byte offsets

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

setEncoding

public void setEncoding(boolean isBigendian)
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:
isBigendian - 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

readDataBytes

public void readDataBytes(long offset,
                          int count,
                          byte[] array)
                   throws java.io.IOException
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
Throws:
java.io.IOException

readDataShorts

public void readDataShorts(long offset,
                           int count,
                           short[] array)
                    throws java.io.IOException
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
Throws:
java.io.IOException

readDataInts

public void readDataInts(long offset,
                         int count,
                         int[] array)
                  throws java.io.IOException
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
Throws:
java.io.IOException

readDataLongs

public void readDataLongs(long offset,
                          int count,
                          long[] array)
                   throws java.io.IOException
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
Throws:
java.io.IOException

readDataFloats

public void readDataFloats(long offset,
                           int count,
                           float[] array)
                    throws java.io.IOException
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
Throws:
java.io.IOException

readDataDoubles

public void readDataDoubles(long offset,
                            int count,
                            double[] array)
                     throws java.io.IOException
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
Throws:
java.io.IOException

createInputStream

public java.io.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,
                      java.io.InputStream in)
               throws java.io.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:
java.io.IOException