跳转到主要内容

数组到/从字节的高性能编码/解码器。

项目描述

什么是tencdec

数组到/从字节的高性能编码/解码器。

它接收一个单调递增整数的列表,并可以非常快速地使用增量将其编码为字节对象(压缩形式)。

然后您可以将其字节对象存储在数据库或其他地方,当您需要整数列表时,只需对其进行解码即可。

示例

>>> numbers = [0, 1, 2, 3, 4, 28, 87, 87, 500, 501, 507, 2313]
>>> enc = tencdec.encode(numbers)
>>> enc
b'\x00\x01\x01\x01\x01\x18;\x00\x9d\x03\x01\x06\x8e\x0e'
>>> dec = tencdec.decode(enc)
>>> numbers == dec
True

并且非常快!

使用上面示例中的数字,timeit显示编码或解码大约需要2微秒(在AMD Ryzen 7 PRO 4750U CPU上)

$ python3 -m timeit -s "import tencdec; numbers = [0, 1, 2, 3, 4, 28, 87, 87, 500, 501, 507, 2313]" "tencdec.encode(numbers)"
100000 loops, best of 5: 2.28 usec per loop
$ python3 -m timeit -s "import tencdec; e = tencdec.encode([0, 1, 2, 3, 4, 28, 87, 87, 500, 501, 507, 2313])" "tencdec.decode(e)"
100000 loops, best of 5: 2.42 usec per loop

限制是数字必须是整数(否则编码会因TypeError而崩溃),并且是单调递增的正数(这是经过验证的,否则会进入无限循环,但是使用assert进行验证,因此您可以通过以-O运行Python来禁用验证,如果您已经确信数字列表是正确的)。

请注意,此项目中没有外部依赖项。它只是Python 3及其标准库。

它如何工作

它编码数字的增量。增量必须是正数(这就是为什么源数字必须是单调递增的)。

如果增量小于或等于127,则直接存储,否则将其存储在多个字节中,每个字节使用七个位,最高位为1表示还有更多字节要处理。

例如,对于简单情况

0000 0100 -> 4 (in decimal)

多个字节

    1111 0100
    0000 0011
  • 第一个字节表示继续,第二个字节表示结束

  • 位在不使用最高位的情况下收集,顺序相反

    000 0011 111 0100 -> 0000 0001 1111 0100 -> 500 (in decimal)
    

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

tencdec-0.0.1.tar.gz (12.1 kB 查看哈希值)

上传时间 源代码

构建分发

tencdec-0.0.1-py3-none-any.whl (12.8 kB 查看哈希值)

上传时间 Python 3

支持者