com.sleepycat.util

Class PackedInteger

public class PackedInteger extends Object

Static methods for reading and writing packed integers.

Note that packed integers are not sorted naturally for a byte-by-byte comparison because they have a preceding length and are little endian; therefore, they are typically not used for keys.

Values in the inclusive range [-119,119] are stored in a single byte. For values outside that range, the first byte stores the sign and the number of additional bytes. The additional bytes store (abs(value) - 119) as an unsigned little endian integer.

To read and write packed integer values, call PackedInteger and PackedInteger. To get the length of a packed integer without reading it, call PackedInteger. To get the length of an unpacked integer without writing it, call PackedInteger.

Note that the packed integer format is designed to accomodate long integers using up to 9 bytes of storage. Currently only int values are implemented, but the same format may be used in future for long values.

Field Summary
static intMAX_LENGTH
The maximum number of bytes needed to store an int value (5).
Method Summary
static intgetReadIntLength(byte[] buf, int off)
Returns the number of bytes that would be read by PackedInteger.
static intgetWriteIntLength(int value)
Returns the number of bytes that would be written by PackedInteger.
static intreadInt(byte[] buf, int off)
Reads a packed integer at the given buffer offset and returns it.
static intwriteInt(byte[] buf, int offset, int value)
Writes a packed integer starting at the given buffer offset and returns the next offset to be written.

Field Detail

MAX_LENGTH

public static final int MAX_LENGTH
The maximum number of bytes needed to store an int value (5). The fifth byte is only needed for values greater than (Integer.MAX_VALUE - 119) or less than (Integer.MIN_VALUE + 119).

Method Detail

getReadIntLength

public static int getReadIntLength(byte[] buf, int off)
Returns the number of bytes that would be read by PackedInteger.

Parameters: buf the buffer to read from. off the offset in the buffer at which to start reading.

Returns: the number of bytes that would be read.

getWriteIntLength

public static int getWriteIntLength(int value)
Returns the number of bytes that would be written by PackedInteger.

Parameters: value the integer to be written.

Returns: the number of bytes that would be used to write the given integer.

readInt

public static int readInt(byte[] buf, int off)
Reads a packed integer at the given buffer offset and returns it.

Parameters: buf the buffer to read from. off the offset in the buffer at which to start reading.

Returns: the integer that was read.

writeInt

public static int writeInt(byte[] buf, int offset, int value)
Writes a packed integer starting at the given buffer offset and returns the next offset to be written.

Parameters: buf the buffer to write to. offset the offset in the buffer at which to start writing. value the integer to be written.

Returns: the offset past the bytes written.