Vesta发号器源码解析——IdMeta
这个类的作用是标示ID的元数据,是记录的比特位信息
字段以及构造方法
字段以及构造方法
//记录MachineId
private byte machineBits;
//记录序列号,也就是同一个周期内的排序
private byte seqBits;
//时间的
private byte timeBits;
//生成方式
private byte genMethodBits;
//类型
private byte typeBits;
//版本
private byte versionBits;
//构造方法
public IdMeta(byte machineBits, byte seqBits, byte timeBits, byte genMethodBits, byte typeBits, byte versionBits) {
super();
this.machineBits = machineBits;
this.seqBits = seqBits;
this.timeBits = timeBits;
this.genMethodBits = genMethodBits;
this.typeBits = typeBits;
this.versionBits = versionBits;
}
对应字段的getter和setter
注意,这里有很多位运算,比较值得借鉴
//获取MachineID的比特位数
public byte getMachineBits() {
return machineBits;
}
//设置MachineID的位数
public void setMachineBits(byte machineBits) {
this.machineBits = machineBits;
}
//获取machineID掩码
//<<移位运算符优先级高,先计算移位,-1L左移machineId的位数相当于-1*2的位数次幂
//也就是表现的形式是1000类似的二进制
//再跟-1异或以后得到的就是machineId的位数全是1
public long getMachineBitsMask() {
return -1L ^ -1L << machineBits;
}
//获取序列的位数
public byte getSeqBits() {
return seqBits;
}
//设置序列的位数
public void setSeqBits(byte seqBits) {
this.seqBits = seqBits;
}
//获取序列的起始位置
public long getSeqBitsStartPos() {
return machineBits;
}
//获取序列的掩码
public long getSeqBitsMask() {
return -1L ^ -1L << seqBits;
}
//时间的比特长度
public byte getTimeBits() {
return timeBits;
}
//设置时间的比特长度
public void setTimeBits(byte timeBits) {
this.timeBits = timeBits;
}
//计算时间的开始位置
public long getTimeBitsStartPos() {
return machineBits + seqBits;
}
//时间掩码
public long getTimeBitsMask() {
return -1L ^ -1L << timeBits;
}
//获取生成方式长度
public byte getGenMethodBits() {
return genMethodBits;
}
//设置生成方式信息
public void setGenMethodBits(byte genMethodBits) {
this.genMethodBits = genMethodBits;
}
//获取生成方式的开始位置
public long getGenMethodBitsStartPos() {
return machineBits + seqBits + timeBits;
}
//获取生成方式的掩码
public long getGenMethodBitsMask() {
return -1L ^ -1L << genMethodBits;
}
//设置类型的长度
public byte getTypeBits() {
return typeBits;
}
//设置类型长度
public void setTypeBits(byte typeBits) {
this.typeBits = typeBits;
}
//设置类型开始位置
public long getTypeBitsStartPos() {
return machineBits + seqBits + timeBits + genMethodBits;
}
//获取类型掩码
public long getTypeBitsMask() {
return -1L ^ -1L << typeBits;
}
//获取版本长度
public byte getVersionBits() {
return versionBits;
}
//设置版本长度
public void setVersionBits(byte versionBits) {
this.versionBits = versionBits;
}
//获取版本开始位置
public long getVersionBitsStartPos() {
return machineBits + seqBits + timeBits + genMethodBits + typeBits;
}
//获取版本掩码
public long getVersionBitsMask() {
return -1L ^ -1L << versionBits;
}
网友评论