public class PackedInteger
extends java.lang.Object
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 readInt(byte[], int)
and writeInt(byte[], int, int)
. To get the length of a packed integer without reading it, call
getReadIntLength(byte[], int)
. To get the length of an unpacked integer without
writing it, call getWriteIntLength(int)
.
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.
Modifier and Type | Field and Description |
---|---|
static int |
MAX_LENGTH
The maximum number of bytes needed to store an int value (5).
|
Constructor and Description |
---|
PackedInteger() |
Modifier and Type | Method and Description |
---|---|
static int |
getReadIntLength(byte[] buf,
int off)
Returns the number of bytes that would be read by
readInt(byte[], int) . |
static int |
getWriteIntLength(int value)
Returns the number of bytes that would be written by
writeInt(byte[], int, int) . |
static int |
readInt(byte[] buf,
int off)
Reads a packed integer at the given buffer offset and returns it.
|
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.
|
public static final int MAX_LENGTH
public static int readInt(byte[] buf, int off)
buf
- the buffer to read from.off
- the offset in the buffer at which to start reading.public static int getReadIntLength(byte[] buf, int off)
readInt(byte[], int)
.buf
- the buffer to read from.off
- the offset in the buffer at which to start reading.public static int writeInt(byte[] buf, int offset, int value)
buf
- the buffer to write to.offset
- the offset in the buffer at which to start writing.value
- the integer to be written.public static int getWriteIntLength(int value)
writeInt(byte[], int, int)
.value
- the integer to be written.