#zlib #deflate #gzip #编码

zlib_stream

一个用于解压缩zlib-stream编码的WebSocket消息的实用工具

2个不稳定版本

0.1.0 2021年12月3日
0.0.2 2021年9月18日
0.0.1 2021年9月18日

#319 in WebSocket

Apache-2.0

16KB
260

zlib-stream-rs

一个简单的实用工具crate,使从zlib-stream解压缩更加容易。

此crate基于flate2以及它们的cloudflare zlib后端

用法

  1. 使用stream功能的StreamExt
use zlib_stream::stream::ZlibStream; 

async fn setup<V: AsRef<[u8]> + Sized, T: Stream<Item=V> + Unpin>(stream: T) {
    let mut stream = ZlibStream::new(stream);
    
    loop {
        let data: Option<Result<Vec<u8>, flate2::DecompressError>> = stream.next().await;
        do_something(data);
    }
}
  1. 裸实现
use zlib_stream::{ZlibStreamDecompressor, ZlibDecompressionError};

fn worker_loop() {
    let mut decompress: ZlibStreamDecompressor = ZlibStreamDecompressor::new();
    
    loop {
        let mut frame: Vec<u8> = get_compressed_frame();
        match decompress.decompress(frame) {
            Ok(vec) => process_data(vec),
            Err(ZlibDecompressionError::NeedMoreData) => continue,
            Err(_err) => panic!("Broken frame!"),
        }
    }
}

依赖关系

~4–15MB
~172K SLoC