コード例 #1
0
ファイル: JsonUtil.java プロジェクト: RongGu/SHadoop
  /** Convert a Json map to a MD5MD5CRC32FileChecksum. */
  public static MD5MD5CRC32FileChecksum toMD5MD5CRC32FileChecksum(final Map<?, ?> json)
      throws IOException {
    if (json == null) {
      return null;
    }

    final Map<?, ?> m = (Map<?, ?>) json.get(MD5MD5CRC32FileChecksum.class.getSimpleName());
    final String algorithm = (String) m.get("algorithm");
    final int length = (int) (long) (Long) m.get("length");
    final byte[] bytes = StringUtils.hexStringToByte((String) m.get("bytes"));

    final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
    final int bytesPerCRC = in.readInt();
    final long crcPerBlock = in.readLong();
    final MD5Hash md5 = MD5Hash.read(in);
    final MD5MD5CRC32FileChecksum checksum =
        new MD5MD5CRC32FileChecksum(bytesPerCRC, crcPerBlock, md5);

    // check algorithm name
    final String alg = "MD5-of-" + crcPerBlock + "MD5-of-" + bytesPerCRC + "CRC32";
    if (!alg.equals(algorithm)) {
      throw new IOException(
          "Algorithm not matched: algorithm="
              + algorithm
              + ", crcPerBlock="
              + crcPerBlock
              + ", bytesPerCRC="
              + bytesPerCRC);
    }
    // check length
    if (length != checksum.getLength()) {
      throw new IOException(
          "Length not matched: length="
              + length
              + ", checksum.getLength()="
              + checksum.getLength());
    }

    return checksum;
  }