[ https://issues.apache.org/jira/browse/HBASE-6919?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Cosmin Lehene updated HBASE-6919: --------------------------------- Labels: beginners (was: ) > 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 > Labels: beginners > > 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 was sent by Atlassian JIRA (v6.3.4#6332)