[
https://issues.apache.org/jira/browse/HBASE-6919?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lars Hofhansl updated HBASE-6919:
---------------------------------
Description:
Remove the throws IOException so that caller doesn't have to catch and ignore.
{code}
public static long readVLong(final byte [] buffer, final int offset)
throws IOException
{code}
Also, add
{code}
public static int readVInt(final byte [] buffer, final int offset)
throws IOException {
return (int)readVLong(buffer,offset);
}
{code}
and these are useful too:
{code}
/**
* Put long as variable length encoded number at the offset in
* the result byte array.
* @param vint Integer to make a vint of.
* @param result buffer to put vint into
* @return Vint length in bytes of vint
*/
public static int vintToBytes(byte[] result, int offset, final long vint) {
long i = vint;
if (i >= -112 && i <= 127) {
result[offset] = (byte) i;
return 1;
}
int len = -112;
if (i < 0) {
i ^= -1L; // take one's complement'
len = -120;
}
long tmp = i;
while (tmp != 0) {
tmp = tmp >> 8;
len--;
}
result[offset++] = (byte) len;
len = (len < -120) ? -(len + 120) : -(len + 112);
for (int idx = len; idx != 0; idx--) {
int shiftbits = (idx - 1) * 8;
long mask = 0xFFL << shiftbits;
result[offset++] = (byte)((i & mask) >> shiftbits);
}
return len + 1;
}
/**
* Decode a vint from the buffer pointed at to by ptr and
* increment the offset of the ptr by the length of the
* vint.
* @param ptr a pointer to a byte array buffer
* @return the decoded vint value as an int
*/
public static int vintFromBytes(ImmutableBytesWritable ptr) {
return (int) vlongFromBytes(ptr);
}
/**
* Decode a vint from the buffer pointed at to by ptr and
* increment the offset of the ptr by the length of the
* vint.
* @param ptr a pointer to a byte array buffer
* @return the decoded vint value as a long
*/
public static long vlongFromBytes(ImmutableBytesWritable ptr) {
final byte [] buffer = ptr.get();
final int offset = ptr.getOffset();
byte firstByte = buffer[offset];
int len = WritableUtils.decodeVIntSize(firstByte);
if (len == 1) {
ptr.set(buffer, offset+1, ptr.getLength());
return firstByte;
}
long i = 0;
for (int idx = 0; idx < len-1; idx++) {
byte b = buffer[offset + 1 + idx];
i = i << 8;
i = i | (b & 0xFF);
}
ptr.set(buffer, offset+len, ptr.getLength());
return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
}
{code}
was:
Remove the throws IOException so that caller doesn't have to catch and ignore.
public static long readVLong(final byte [] buffer, final int offset)
throws IOException
Also, add
public static int readVInt(final byte [] buffer, final int offset)
throws IOException {
return (int)readVLong(buffer,offset);
}
and these are useful too:
{code}
/**
* Put long as variable length encoded number at the offset in
* the result byte array.
* @param vint Integer to make a vint of.
* @param result buffer to put vint into
* @return Vint length in bytes of vint
*/
public static int vintToBytes(byte[] result, int offset, final long vint) {
long i = vint;
if (i >= -112 && i <= 127) {
result[offset] = (byte) i;
return 1;
}
int len = -112;
if (i < 0) {
i ^= -1L; // take one's complement'
len = -120;
}
long tmp = i;
while (tmp != 0) {
tmp = tmp >> 8;
len--;
}
result[offset++] = (byte) len;
len = (len < -120) ? -(len + 120) : -(len + 112);
for (int idx = len; idx != 0; idx--) {
int shiftbits = (idx - 1) * 8;
long mask = 0xFFL << shiftbits;
result[offset++] = (byte)((i & mask) >> shiftbits);
}
return len + 1;
}
/**
* Decode a vint from the buffer pointed at to by ptr and
* increment the offset of the ptr by the length of the
* vint.
* @param ptr a pointer to a byte array buffer
* @return the decoded vint value as an int
*/
public static int vintFromBytes(ImmutableBytesWritable ptr) {
return (int) vlongFromBytes(ptr);
}
/**
* Decode a vint from the buffer pointed at to by ptr and
* increment the offset of the ptr by the length of the
* vint.
* @param ptr a pointer to a byte array buffer
* @return the decoded vint value as a long
*/
public static long vlongFromBytes(ImmutableBytesWritable ptr) {
final byte [] buffer = ptr.get();
final int offset = ptr.getOffset();
byte firstByte = buffer[offset];
int len = WritableUtils.decodeVIntSize(firstByte);
if (len == 1) {
ptr.set(buffer, offset+1, ptr.getLength());
return firstByte;
}
long i = 0;
for (int idx = 0; idx < len-1; idx++) {
byte b = buffer[offset + 1 + idx];
i = i << 8;
i = i | (b & 0xFF);
}
ptr.set(buffer, offset+len, ptr.getLength());
return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
}
{code}
> Remove unnecessary cast from Bytes.readVLong
> --------------------------------------------
>
> Key: HBASE-6919
> URL: https://issues.apache.org/jira/browse/HBASE-6919
> Project: HBase
> Issue Type: Bug
> Reporter: James Taylor
> Priority: Minor
> Fix For: 0.94.3, 0.96.0
>
>
> Remove the throws IOException so that caller doesn't have to catch and ignore.
> {code}
> public static long readVLong(final byte [] buffer, final int offset)
> throws IOException
> {code}
> Also, add
> {code}
> public static int readVInt(final byte [] buffer, final int offset)
> throws IOException {
> return (int)readVLong(buffer,offset);
> }
> {code}
> and these are useful too:
> {code}
> /**
> * Put long as variable length encoded number at the offset in
> * the result byte array.
> * @param vint Integer to make a vint of.
> * @param result buffer to put vint into
> * @return Vint length in bytes of vint
> */
> public static int vintToBytes(byte[] result, int offset, final long vint)
> {
> long i = vint;
> if (i >= -112 && i <= 127) {
> result[offset] = (byte) i;
> return 1;
> }
> int len = -112;
> if (i < 0) {
> i ^= -1L; // take one's complement'
> len = -120;
> }
> long tmp = i;
> while (tmp != 0) {
> tmp = tmp >> 8;
> len--;
> }
> result[offset++] = (byte) len;
> len = (len < -120) ? -(len + 120) : -(len + 112);
> for (int idx = len; idx != 0; idx--) {
> int shiftbits = (idx - 1) * 8;
> long mask = 0xFFL << shiftbits;
> result[offset++] = (byte)((i & mask) >> shiftbits);
> }
> return len + 1;
> }
> /**
> * Decode a vint from the buffer pointed at to by ptr and
> * increment the offset of the ptr by the length of the
> * vint.
> * @param ptr a pointer to a byte array buffer
> * @return the decoded vint value as an int
> */
> public static int vintFromBytes(ImmutableBytesWritable ptr) {
> return (int) vlongFromBytes(ptr);
> }
>
> /**
> * Decode a vint from the buffer pointed at to by ptr and
> * increment the offset of the ptr by the length of the
> * vint.
> * @param ptr a pointer to a byte array buffer
> * @return the decoded vint value as a long
> */
> public static long vlongFromBytes(ImmutableBytesWritable ptr) {
> final byte [] buffer = ptr.get();
> final int offset = ptr.getOffset();
> byte firstByte = buffer[offset];
> int len = WritableUtils.decodeVIntSize(firstByte);
> if (len == 1) {
> ptr.set(buffer, offset+1, ptr.getLength());
> return firstByte;
> }
> long i = 0;
> for (int idx = 0; idx < len-1; idx++) {
> byte b = buffer[offset + 1 + idx];
> i = i << 8;
> i = i | (b & 0xFF);
> }
> ptr.set(buffer, offset+len, ptr.getLength());
> return (WritableUtils.isNegativeVInt(firstByte) ? ~i : i);
> }
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira