| |
|
| com.sleepycat.util.FastInputStream com.sleepycat.bind.tuple.TupleInput
All known Subclasses: com.sleepycat.persist.impl.RecordInput,
TupleInput | public class TupleInput extends FastInputStream (Code) | | 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
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. BigInteger values are stored
with a preceding length having the same sign as the value.
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.
- Null strings are UTF encoded as { 0xFF }, which is not allowed in a
standard UTF encoding. This allows null strings, as distinct from empty or
zero length strings, to be represented in a tuple. Using the default
comparator, null strings will be ordered last.
- Zero (0x0000) character values are UTF encoded as non-zero values, and
therefore embedded zeros in the string are supported. The sequence { 0xC0,
0x80 } is used to encode a zero character. This UTF encoding is the same
one used by native Java UTF libraries. However, this encoding of zero does
impact the lexicographical ordering, and zeros will not be sorted first (the
natural order) or last. For all character values other than zero, the
default UTF byte ordering is the same as the Unicode lexicographical
character ordering.
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:
author: Mark Hayes |
Constructor Summary | |
public | TupleInput(byte[] buffer) Creates a tuple input object for reading a byte array of tuple data. | public | 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. | public | TupleInput(TupleOutput output) Creates a tuple input object from the data contained in a tuple output
object. |
Method Summary | |
final public int | getBigIntegerByteLength() Returns the byte length of a
BigInteger . | final public int | getPackedIntByteLength() Returns the byte length of a packed integer. | final public int | getStringByteLength() Returns the byte length of a null-terminated UTF string in the data
buffer, including the terminator. | final public BigInteger | readBigInteger() Reads a
BigInteger . | final public 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. | final public byte | readByte() Reads a signed byte (one byte) value from the buffer. | final public 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.
Reads values that were written using
TupleOutput.writeBytes .
Only characters with values below 0x100 may be read using this method.
Parameters: length - is the number of bytes to be read. | final public 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. | final public char | readChar() Reads a char (two byte) unsigned value from the buffer. | final public 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.
Reads values that were written using
TupleOutput.writeChars .
Parameters: length - is the number of characters to be read. | final public 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. | final public double | readDouble() Reads a signed double (eight byte) value from the buffer.
Reads values that were written using
TupleOutput.writeDouble .
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. | final public float | readFloat() Reads a signed float (four byte) value from the buffer.
Reads values that were written using
TupleOutput.writeFloat .
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. | final public int | readInt() Reads a signed int (four byte) value from the buffer. | final public long | readLong() Reads a signed long (eight byte) value from the buffer. | final public int | readPackedInt() Reads a packed integer. | final public short | readShort() Reads a signed short (two byte) value from the buffer. | final public double | readSortedDouble() Reads a signed double (eight byte) value from the buffer, with support
for correct default sorting of all values.
Reads values that were written using
TupleOutput.writeSortedDouble .
Float.longBitsToDouble and the following bit
manipulations are used to convert the stored representation to a signed
double value.
int val = ... | final public float | readSortedFloat() Reads a signed float (four byte) value from the buffer, with support
for correct default sorting of all values.
Reads values that were written using
TupleOutput.writeSortedFloat .
Float.intBitsToFloat and the following bit
manipulations are used to convert the stored representation to a signed
float value.
int val = ... | final public String | readString() Reads a null-terminated UTF string from the data buffer and converts
the data from UTF to Unicode. | final public String | readString(int length) Reads the specified number of UTF characters string from the data
buffer and converts the data from UTF to Unicode.
Reads values that were written using
TupleOutput.writeString(char[]) .
Parameters: length - is the number of characters to be read. | final public void | readString(char[] chars) Reads the specified number of UTF characters string from the data
buffer and converts the data from UTF to Unicode. | final public int | readUnsignedByte() Reads an unsigned byte (one byte) value from the buffer. | final public long | readUnsignedInt() Reads an unsigned int (four byte) value from the buffer. | final public int | readUnsignedShort() Reads an unsigned short (two byte) value from the buffer. |
TupleInput | public TupleInput(byte[] buffer)(Code) | | Creates a tuple input object for reading a byte array of tuple data. A
reference to the byte array will be kept by this object (it will not be
copied) and therefore the byte array should not be modified while this
object is in use.
Parameters: buffer - is the byte array to be read and should contain data intuple format. |
TupleInput | public TupleInput(byte[] buffer, int offset, int length)(Code) | | Creates a tuple input object for reading a byte array of tuple data at
a given offset for a given length. A reference to the byte array will
be kept by this object (it will not be copied) and therefore the byte
array should not be modified while this object is in use.
Parameters: buffer - is the byte array to be read and should contain data intuple format. Parameters: offset - is the byte offset at which to begin reading. Parameters: length - is the number of bytes to be read. |
TupleInput | public TupleInput(TupleOutput output)(Code) | | Creates a tuple input object from the data contained in a tuple output
object. A reference to the tuple output's byte array will be kept by
this object (it will not be copied) and therefore the tuple output
object should not be modified while this object is in use.
Parameters: output - is the tuple output object containing the data to be read. |
getPackedIntByteLength | final public int getPackedIntByteLength()(Code) | | Returns the byte length of a packed integer.
See Also: PackedInteger |
readBytes | final public String readBytes(int length) throws IndexOutOfBoundsException(Code) | | Reads the specified number of bytes from the buffer, converting each
unsigned byte value to a character of the resulting string.
Reads values that were written using
TupleOutput.writeBytes .
Only characters with values below 0x100 may be read using this method.
Parameters: length - is the number of bytes to be read. the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readBytes | final public void readBytes(char[] chars) throws IndexOutOfBoundsException(Code) | | Reads the specified number of bytes from the buffer, converting each
unsigned byte value to a character of the resulting array.
Reads values that were written using
TupleOutput.writeBytes .
Only characters with values below 0x100 may be read using this method.
Parameters: chars - is the array to receive the data and whose length is usedto determine the number of bytes to be read. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readChars | final public String readChars(int length) throws IndexOutOfBoundsException(Code) | | Reads the specified number of characters from the buffer, converting
each two byte unsigned value to a character of the resulting string.
Reads values that were written using
TupleOutput.writeChars .
Parameters: length - is the number of characters to be read. the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readChars | final public void readChars(char[] chars) throws IndexOutOfBoundsException(Code) | | Reads the specified number of characters from the buffer, converting
each two byte unsigned value to a character of the resulting array.
Reads values that were written using
TupleOutput.writeChars .
Parameters: chars - is the array to receive the data and whose length is usedto determine the number of characters to be read. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readDouble | final public double readDouble() throws IndexOutOfBoundsException(Code) | | Reads a signed double (eight byte) value from the buffer.
Reads values that were written using
TupleOutput.writeDouble .
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.readSortedDouble .
the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readFloat | final public float readFloat() throws IndexOutOfBoundsException(Code) | | Reads a signed float (four byte) value from the buffer.
Reads values that were written using
TupleOutput.writeFloat .
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.readSortedFloat .
the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readPackedInt | final public int readPackedInt()(Code) | | Reads a packed integer. Note that packed integers are not appropriate
for sorted values (keys) unless a custom comparator is used.
See Also: PackedInteger |
readSortedDouble | final public double readSortedDouble() throws IndexOutOfBoundsException(Code) | | Reads a signed double (eight byte) value from the buffer, with support
for correct default sorting of all values.
Reads values that were written using
TupleOutput.writeSortedDouble .
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);
the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
readSortedFloat | final public float readSortedFloat() throws IndexOutOfBoundsException(Code) | | Reads a signed float (four byte) value from the buffer, with support
for correct default sorting of all values.
Reads values that were written using
TupleOutput.writeSortedFloat .
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);
the value read from the buffer. throws: IndexOutOfBoundsException - if not enough bytes are available inthe buffer. |
|
|
|