python绑定到heatshrink库

Heatshrink的Python项目详细描述


python绑定到heatshrink LZSS compression library

支持的版本:
python>;=2.6–完全
python 3–实验性的

测试平台:
*操作系统x>;10.10
*debian 8
*freebsd 10

安装

来自PYPI:

$ easy_install heatshrink
$ pip install heatshrink

手动安装:

$ python setup.py install

用法

文件/流

文件接口试图模拟内置文件对象的行为 以及其他类似文件的对象(例如bz2.BZ2File),因此您可以期望所有方法 也可以在file中实现。

您可以使用open函数打开热缩文件:

>>> import heatshrink
>>> with heatshrink.open('data.bin', mode='wb') as fp:
...     fp.write("Is there anybody in there?")

您也可以直接使用EncodedFile

>>> from heatshrink import EncodedFile
>>> with EncodedFile('data.bin') as fp:
...     # Read a buffer
...     print('Buffered: %r' % fp.read(256))
...     # Iterate through lines
...     for line in fp:
...         print('Read line: %r' % line)

字节字符串

编码器接受任何iterable并返回一个字节字符串 包含编码(压缩)数据的。

>>> import heatshrink
>>> encoded = heatshrink.encode('a string')
>>> type(encoded)
<type 'str'>  # <class 'bytes'> in Python 3
>>> encoded
'\xb0\xc8.wK\x95\xa6\xddg'

解码器接受实现缓冲区协议的任何对象,并且 返回解码数据的字节表示形式。

>>> import heatshrink
>>> decoded = heatshrink.decode(b'\xb0\xc8.wK\x95\xa6\xddg')
>>> type(decoded)
<type 'str'>  # <class 'bytes'> in Python 3
>>> decoded
'a string'

参数

编码器和解码器都允许提供window_sz2lookahead_sz2关键字:

window_sz2-窗口大小决定了在输入中搜索重复模式的距离。8的窗口sz2将只使用256字节(2^8),而10的窗口sz2将使用1024字节(2^10)。后者使用更多的内存,但也可以通过检测更多的重复来更有效地压缩。

lookahead_sz2-前向大小决定找到的重复模式的最大长度。如果lookahead_sz2是4,则50字节的“a”字符运行将表示为多个重复的16字节模式(2^4是16),而较大的lookahead_sz2可以同时表示所有字符。用于前向大小的位数是固定的,因此过大的前向大小可以通过向小模式添加未使用的大小位来减少压缩。

input_buffer_size-解码器使用的输入缓冲区有多大。这会影响解码器在一个步骤中可以做多少工作,而较大的缓冲区将使用更多的内存。一个非常小的缓冲区(例如,1字节)会由于大量的suspend/resume函数调用而增加开销,但不应该改变数据压缩的程度。

查看heatshrink configuration page了解更多详细信息。

有关更多用例,请参阅tests folder

基准

基准测试检查对~6MB文件的压缩/解压缩:

$ python bench/benchmarks.py

测试

运行测试和执行测试一样简单:

$ python setup.py test

许可证

ISC许可证

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?