可以看出brotli的压缩比大概在9左右,gzip大概在7左右,deflate也大概在7左右,压缩比brotli最高,适应网络传输慢的情况,压缩速度gzip和deflate相对较快,解压缩deflate较快,brotli和gzip差不多。rust中三种压缩方式库的选择
三种方式均可实现流式的压缩,即边写入数据,边读出压缩数据,不用完全的写入所有数据,完整的实现方法在 RecvStream里,将压缩的数据缓存到self.cache_body_data中定义压缩方法值
此处利用的是类use flate2::write::GzEncoder,定义为GzEncoder,其中BinaryMut为压缩后的数据,需要具备std::io::Write方法。
此处利用的是类use flate2::write::DeflateEncoder,定义为DeflateEncoder,其中BinaryMut为压缩后的数据,需要具备std::io::Write方法。
此处利用的是类use brotli::CompressorWriter;,定义为CompressorWriter,其中BinaryMut为压缩后的数据,需要具备std::io::Write方法。
和压缩不同的是,解压的时候必须将完整的数据进行解压,所以需要收到全部的数据的时候才尝试进行解压,可能我的理解有误,欢迎指出,当下的实现方式可能会占用大量的内存,非我所愿。主要源码在 SendStream中实现。三种方式均类似,以下
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |