2021SC@SDUSC
前言
本文介绍上一篇文章中DataTree构造函数传入的参数digestCalculator,来看一下它所属的类。
DigestCalculator
该类的对象主要用于计算一个给定的数据节点的digest,关于digest,我想应该是和hash有关的一种说法,我们知道hash将大范围的数据映射到小范围,在加密领域,通常会体现会得到一个固定长度的数字或字符串,称为消息摘要,所以称digest。
而在该类中,主要是使用CRC校验,来保障数据的完整性,这相比于hash函数,不具有保障不被“碰撞”的能力。(碰撞是说两个不同的输入,hash后是同一个值)
该类的构造函数是默认无参构造函数。
该类主要的函数如下:
long calculateDigest(String path, byte[] data, StatPersisted stat) {
if (!ZooKeeperServer.isDigestEnabled()) {
return 0;
}
if (path.startsWith(ZooDefs.ZOOKEEPER_NODE_SUBTREE)) {
return 0;
}
if (path.equals("/")) {
path = "";
}
byte[] b = new byte[60];
ByteBuffer bb = ByteBuffer.wrap(b);
bb.putLong(stat.getCzxid());