|
Berkeley DB version 4.5.20 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object java.io.InputStream com.sleepycat.util.FastInputStream com.sleepycat.bind.tuple.TupleInput
public class TupleInput
An InputStream
with DataInput
-like methods for
reading tuple fields. It is used by TupleBinding
.
This class has many methods that have the same signatures as methods in
the DataInput
interface. The reason this class does not
implement DataInput
is because it would break the interface
contract for those methods because of data format differences.
Signed numbers are stored in the buffer in MSB (most significant byte first) order with their sign bit (high-order bit) inverted to cause negative numbers to be sorted first when comparing values as unsigned byte arrays, as done in a database. Unsigned numbers, including characters, are stored in MSB order with no change to their sign bit.
Strings and character arrays are stored either as a fixed length array of unicode characters, where the length must be known by the application, or as a null-terminated UTF byte array.
Floats and doubles are stored using two different representations: sorted representation and integer-bit (IEEE 754) representation. If you use negative floating point numbers in a key, you should use sorted representation; alternatively you may use integer-bit representation but you will need to implement and configure a custom comparator to get correct numeric ordering for negative numbers.
To use sorted representation use this set of methods:
TupleOutput.writeSortedFloat(float)
readSortedFloat()
TupleOutput.writeSortedDouble(double)
readSortedDouble()
To use integer-bit representation use this set of methods:
Field Summary |
---|
Fields inherited from class com.sleepycat.util.FastInputStream |
---|
buf, len, mark, off |
Constructor Summary | |
---|---|
TupleInput(byte[] buffer)
Creates a tuple input object for reading a byte array of tuple data. |
|
TupleInput(byte[] buffer,
int offset,
int length)
Creates a tuple input object for reading a byte array of tuple data at a given offset for a given length. |
|
TupleInput(TupleOutput output)
Creates a tuple input object from the data contained in a tuple output object. |
Method Summary | |
---|---|
int |
getPackedIntByteLength()
Returns the byte length of a packed integer. |
int |
getStringByteLength()
Returns the byte length of a null-terminated UTF string in the data buffer, including the terminator. |
boolean |
readBoolean()
Reads a boolean (one byte) unsigned value from the buffer and returns true if it is non-zero and false if it is zero. |
byte |
readByte()
Reads a signed byte (one byte) value from the buffer. |
void |
readBytes(char[] chars)
Reads the specified number of bytes from the buffer, converting each unsigned byte value to a character of the resulting array. |
String |
readBytes(int length)
Reads the specified number of bytes from the buffer, converting each unsigned byte value to a character of the resulting string. |
char |
readChar()
Reads a char (two byte) unsigned value from the buffer. |
void |
readChars(char[] chars)
Reads the specified number of characters from the buffer, converting each two byte unsigned value to a character of the resulting array. |
String |
readChars(int length)
Reads the specified number of characters from the buffer, converting each two byte unsigned value to a character of the resulting string. |
double |
readDouble()
Reads a signed double (eight byte) value from the buffer. |
float |
readFloat()
Reads a signed float (four byte) value from the buffer. |
int |
readInt()
Reads a signed int (four byte) value from the buffer. |
long |
readLong()
Reads a signed long (eight byte) value from the buffer. |
int |
readPackedInt()
Reads a packed integer. |
short |
readShort()
Reads a signed short (two byte) value from the buffer. |
double |
readSortedDouble()
Reads a signed double (eight byte) value from the buffer, with support for correct default sorting of all values. |
float |
readSortedFloat()
Reads a signed float (four byte) value from the buffer, with support for correct default sorting of all values. |
String |
readString()
Reads a null-terminated UTF string from the data buffer and converts the data from UTF to Unicode. |
void |
readString(char[] chars)
Reads the specified number of UTF characters string from the data buffer and converts the data from UTF to Unicode. |
String |
readString(int length)
Reads the specified number of UTF characters string from the data buffer and converts the data from UTF to Unicode. |
int |
readUnsignedByte()
Reads an unsigned byte (one byte) value from the buffer. |
long |
readUnsignedInt()
Reads an unsigned int (four byte) value from the buffer. |
int |
readUnsignedShort()
Reads an unsigned short (two byte) value from the buffer. |
Methods inherited from class com.sleepycat.util.FastInputStream |
---|
available, getBufferBytes, getBufferLength, getBufferOffset, mark, markSupported, read, read, read, readFast, readFast, readFast, reset, skip, skipFast |
Methods inherited from class java.io.InputStream |
---|
close |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public TupleInput(byte[] buffer)
buffer
- is the byte array to be read and should contain data in
tuple format.public TupleInput(byte[] buffer, int offset, int length)
buffer
- is the byte array to be read and should contain data in
tuple format.offset
- is the byte offset at which to begin reading.length
- is the number of bytes to be read.public TupleInput(TupleOutput output)
output
- is the tuple output object containing the data to be read.Method Detail |
---|
public final String readString() throws IndexOutOfBoundsException, IllegalArgumentException
TupleOutput.writeString(String)
.
IndexOutOfBoundsException
- if no null terminating byte is found
in the buffer.
IllegalArgumentException
- malformed UTF data is encountered.public final char readChar() throws IndexOutOfBoundsException
TupleOutput.writeChar(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final boolean readBoolean() throws IndexOutOfBoundsException
TupleOutput.writeBoolean(boolean)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final byte readByte() throws IndexOutOfBoundsException
TupleOutput.writeByte(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final short readShort() throws IndexOutOfBoundsException
TupleOutput.writeShort(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final int readInt() throws IndexOutOfBoundsException
TupleOutput.writeInt(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final long readLong() throws IndexOutOfBoundsException
TupleOutput.writeLong(long)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final float readFloat() throws IndexOutOfBoundsException
TupleOutput.writeFloat(float)
.
Float.intBitsToFloat
is used to convert the signed int
value.
Note: This method operations on byte array values that by
default (without a custom comparator) do not sort correctly for
negative values. Only non-negative values are sorted correctly by
default. To sort all values correctly by default, use readSortedFloat()
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final double readDouble() throws IndexOutOfBoundsException
TupleOutput.writeDouble(double)
.
Double.longBitsToDouble
is used to convert the signed long
value.
Note: This method operations on byte array values that by
default (without a custom comparator) do not sort correctly for
negative values. Only non-negative values are sorted correctly by
default. To sort all values correctly by default, use readSortedDouble()
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final float readSortedFloat() throws IndexOutOfBoundsException
TupleOutput.writeSortedFloat(float)
.
Float.intBitsToFloat
and the following bit
manipulations are used to convert the stored representation to a signed
float value.
int val = ... // get stored bits val ^= (val < 0) ? 0x80000000 : 0xffffffff; return Float.intBitsToFloat(val);
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final double readSortedDouble() throws IndexOutOfBoundsException
TupleOutput.writeSortedDouble(double)
.
Float.longBitsToDouble
and the following bit
manipulations are used to convert the stored representation to a signed
double value.
int val = ... // get stored bits val ^= (val < 0) ? 0x8000000000000000L : 0xffffffffffffffffL; return Double.longBitsToDouble(val);
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final int readUnsignedByte() throws IndexOutOfBoundsException
TupleOutput.writeUnsignedByte(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final int readUnsignedShort() throws IndexOutOfBoundsException
TupleOutput.writeUnsignedShort(int)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final long readUnsignedInt() throws IndexOutOfBoundsException
TupleOutput.writeUnsignedInt(long)
.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final String readBytes(int length) throws IndexOutOfBoundsException
TupleOutput.writeBytes(java.lang.String)
.
Only characters with values below 0x100 may be read using this method.
length
- is the number of bytes to be read.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final String readChars(int length) throws IndexOutOfBoundsException
TupleOutput.writeChars(java.lang.String)
.
length
- is the number of characters to be read.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final void readBytes(char[] chars) throws IndexOutOfBoundsException
TupleOutput.writeBytes(java.lang.String)
.
Only characters with values below 0x100 may be read using this method.
chars
- is the array to receive the data and whose length is used
to determine the number of bytes to be read.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final void readChars(char[] chars) throws IndexOutOfBoundsException
TupleOutput.writeChars(java.lang.String)
.
chars
- is the array to receive the data and whose length is used
to determine the number of characters to be read.
IndexOutOfBoundsException
- if not enough bytes are available in
the buffer.public final String readString(int length) throws IndexOutOfBoundsException, IllegalArgumentException
TupleOutput.writeString(char[])
.
length
- is the number of characters to be read.
IndexOutOfBoundsException
- if no null terminating byte is found
in the buffer.
IllegalArgumentException
- malformed UTF data is encountered.public final void readString(char[] chars) throws IndexOutOfBoundsException, IllegalArgumentException
TupleOutput.writeString(char[])
.
chars
- is the array to receive the data and whose length is used
to determine the number of characters to be read.
IndexOutOfBoundsException
- if no null terminating byte is found
in the buffer.
IllegalArgumentException
- malformed UTF data is encountered.public final int getStringByteLength() throws IndexOutOfBoundsException, IllegalArgumentException
TupleOutput.writeString(String)
.
IndexOutOfBoundsException
- if no null terminating byte is found
in the buffer.
IllegalArgumentException
- malformed UTF data is encountered.public int readPackedInt()
PackedInteger
public int getPackedIntByteLength()
PackedInteger
|
Berkeley DB version 4.5.20 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |