美文网首页
【Vesta发号器源码】IdMeta

【Vesta发号器源码】IdMeta

作者: DeanChangDM | 来源:发表于2019-05-13 14:02 被阅读0次

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;
    }

相关文章

网友评论

      本文标题:【Vesta发号器源码】IdMeta

      本文链接:https://www.haomeiwen.com/subject/gevlaqtx.html