Python 使用zfec 纠删码示例

源码地址:https://github.com/tahoe-lafs/zfec

安装zfec

python -m pip install zfec

示例

例如我们有k个数据块,我们希望生成m个数据块(m>=k),从而可以使用m个数据块中的任意k个恢复出原来的数据块。
这里,我们取k=2,m=3,原始数据是二进制字符串b'abcde' 。需要注意的是,为了保证原始数据能被k整除,该工具会对数据添加padding,padding为b'\x00'

编码时,会得到一个数组,每个元素是一个二进制字符串(数据块)。
解码时,需要输入k个数据块以及对应的下标,以及添加的padding的长度。


from zfec.easyfec import Encoder, Decoder
import random

if __name__ == "__main__":
    k = 2
    m = 3
    # 1 correction blocks for every 2 blocks
    enc = Encoder(k, m)
    dec = Decoder(k, m)

    # Dummy payload, byte data
    data = b'abcde'

    # calculate padding length
    if len(data) % k != 0:
        padlen = (len(data)//k) - len(data)%k
    else: padlen = 0

    # encode 
    byte_array = enc.encode(data)
    print(byte_array) # [b'abc', b'de\x00', b'kl\xa5']


    # decode, need pass in the blocks + blocknums and padlen
    blocks = (byte_array[0],byte_array[2])
    blocknums = (0,2)
    decoded = dec.decode(blocks, sharenums=blocknums,padlen=padlen)

    print(decoded) # b'abcde'

猜你喜欢

转载自blog.csdn.net/Fei20140908/article/details/120388901