code: public static long readLong(byte[] src, int offset) throws IllegalArgumentException {
      if (src.length < offset) {
        throw new IllegalArgumentException("There's nothing to read in src from offset " + offset);
      }
  
      long r = 0;
      for (int i = offset, j = 0; i < src.length && j < 64; i++, j += 8) {
        r += ((long) src[i] & 0xff) << j;
      }
      return r;
    }
docs: Read long value from given source byte array
  
  @param src Source byte array value is read from
  @param offset The starting point where value is read from
  @return The long value
  @throws IllegalArgumentException When the length of input byte array conflicts offset