compression - gzip如何找不到两个相同的部分?
问题描述
我写了这样的代码
#include "zlib.h"
unsigned char dst[1<<26];
unsigned char src[1<<24];
int main() {
unsigned long dstlen = 1<<26;
srand (12345);
for (int i=0; i<1<<23; i++) src[i] = src[i | 1<<23] = rand();
compress(dst,&dstlen,src,1<<24);
printf ("%d/%d = %f\n", dstlen, 1<<24, dstlen / double(1<<24));
}
它试图压缩连接在一起的两个相同的 2 23字节部分。然而,结果是
16782342/16777216 = 1.000306
具有这种规则的数据如何不被压缩?
解决方案
zlib 中匹配字符串的最大距离为 32,768 字节。
推荐阅读
- javascript - 为什么for循环中的异步回调只执行一次?
- c - C奇怪行为中的简单字符串
- .net-core - 无法将 switch 表达式与 dotnet-script 一起使用
- java - 如何用我的流中的空列表替换任何 null 实例?
- vb.net - 从 SQL 读取到 Button
- ssl - IBM-MQ 遥测通道中的刷新 SSL 安全性未按预期工作
- pandas - How to mark or select rows in one dataframe, where value lies between any of the ranges in another dataframe featuring additional identifier
- testing - 转换 Quarkus 测试的响应正文
- git - git rebase 在已经推送到远程的功能分支上
- json - 如何将分号分隔的参数转换为json?