code: public static byte[] addCrc32(byte[] b, int off, int len) throws NullPointerException, ArrayIndexOutOfBoundsException {
          byte[] res = new byte[len + 4];
          byte[] crc = calculateCrc32(b, off, len);
          System.arraycopy(b, off, res, 0, len);
          System.arraycopy(crc, 0, res, len, 4);
          return res;
      }
docs: Computes the CRC32 checksum for {@code len} bytes of the given data, starting from {@code off}.
  <p>
  The checksum is appended to the original data and the result returned in a newly allocated array.
  </p>
  
  @param b
  the data to compute the checksum for.
  @param off
  the buffer containing the data to compute the checksum for.
  @param len
  number of bytes to include in the checksum.
  
  @return An array containing specified data bytes with CRC appended to it.
  
  @throws NullPointerException
  if {@code b} is {@code null}.
  @throws ArrayIndexOutOfBoundsException
  if the half-range {@code [off..off+len)} is not in {@code [0..b.length)}.