数组到/从字节的高性能编码/解码器。
项目描述
什么是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 查看哈希值)
关闭
tencdec-0.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2799016ebd1fe033c5fe93947f5fed5e5fed8adcb4bf60c869443834b80e2354 |
|
MD5 | f4d04379d645f5026737cd35a8bcd284 |
|
BLAKE2b-256 | f2214fc7831fc86b8344bab9ff16cd357953599d7a2ab1614f4c5cfc7ac59436 |
关闭
tencdec-0.0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 81a4da617baeaa0719ac71dbc0a8bc0b4d27a1e03c709eefc027d527ebd672d0 |
|
MD5 | bcdfed6c955f451049db899bd9ab1951 |
|
BLAKE2b-256 | fd4d038e0c3a0a322ffa4736c59d99187eb4b2eac80dca0a6e2080913f00bdf2 |