com.sleepycat.bind.tuple
public class TupleInput extends FastInputStream
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 java.io.DataInput interface. The reason this class does not implement java.io.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:
To use integer-bit representation use this set of methods:
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.
|
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.
|
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.
|
char | readChar()
Reads a char (two byte) unsigned value from the buffer.
|
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.
|
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.
|
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.
|
String | readString(int length)
Reads the specified number of UTF characters 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.
|
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.
|
Parameters: buffer is the byte array to be read and should contain data in tuple format.
Parameters: 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.
Parameters: output is the tuple output object containing the data to be read.
See Also: PackedInteger
Throws: IndexOutOfBoundsException if no null terminating byte is found in the buffer. IllegalArgumentException malformed UTF data is encountered.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Parameters: length is the number of bytes to be read.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Parameters: chars is the array to receive the data and whose length is used to determine the number of bytes to be read.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Parameters: length is the number of characters to be read.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Parameters: chars is the array to receive the data and whose length is used to determine the number of characters to be read.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
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 TupleInput.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
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 TupleInput.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
See Also: PackedInteger
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
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);
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
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);
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the converted string.
Throws: IndexOutOfBoundsException if no null terminating byte is found in the buffer. IllegalArgumentException malformed UTF data is encountered.
(char[])
.
Parameters: length is the number of characters to be read.
Returns: the converted string.
Throws: IndexOutOfBoundsException if no null terminating byte is found in the buffer. IllegalArgumentException malformed UTF data is encountered.
(char[])
.
Parameters: chars is the array to receive the data and whose length is used to determine the number of characters to be read.
Throws: IndexOutOfBoundsException if no null terminating byte is found in the buffer. IllegalArgumentException malformed UTF data is encountered.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.
Returns: the value read from the buffer.
Throws: IndexOutOfBoundsException if not enough bytes are available in the buffer.