public static BlobProperties deserializeBlobPropertiesRecord(CrcInputStream crcStream)
        throws IOException, MessageFormatException {
      try {
        DataInputStream dataStream = new DataInputStream(crcStream);
        BlobProperties properties = BlobPropertiesSerDe.getBlobPropertiesFromStream(dataStream);
        long actualCRC = crcStream.getValue();
        long expectedCRC = dataStream.readLong();
        if (actualCRC != expectedCRC) {
          logger.error("corrupt data while parsing blob properties Expected CRC {} Actual CRC {}", expectedCRC,
              actualCRC);
          throw new MessageFormatException("Blob property data is corrupt", MessageFormatErrorCodes.DataCorrupt);
        }
        return properties;
      } catch (Exception e) {
        logger.error("Blob property failed to be parsed. Data may be corrupt with exception {}", e);
        throw new MessageFormatException("Blob property failed to be parsed. Data may be corrupt",
            MessageFormatErrorCodes.DataCorrupt);
      }
    }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|         |               |               |           |            |
| version |   property1   |   property2   |           |     Crc    |
|(2 bytes)| (1 - n bytes) | (1 - n bytes) |   .....   |  (8 bytes) |
|         |               |               |           |            |
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 version         - The version of the blob property record

 properties      - Variable size properties that define the blob.

 crc             - The crc of the blob property record
ambry-messageformat/src/main/java/com/github/ambry/messageformat/MessageFormatRecord.java