public static void readVLong(byte[] bytes, int offset, VLong vlong) {
    byte firstByte = bytes[offset];
    vlong.length = (byte) WritableUtils.decodeVIntSize(firstByte);
    if (vlong.length == 1) {
      vlong.value = firstByte;
      return;
    }
    long i = 0;
    for (int idx = 0; idx < vlong.length - 1; idx++) {
      byte b = bytes[offset + 1 + idx];
      i = i << 8;
      i = i | (b & 0xFF);
    }
    vlong.value = (WritableUtils.isNegativeVInt(firstByte) ? (i ^ -1L) : i);
  }
Reads a zero-compressed encoded long from a byte array and returns it.

@param bytes
         the byte array
@param offset
         offset of the array to read from
@param vlong
         storing the deserialized long and its size in byte
serde/src/java/org/apache/hadoop/hive/serde2/lazybinary/LazyBinaryUtils.java