- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我们使用字典时,我试图理解原始压缩的功能。我知道以下内容。1. 当我们使用字典时,应用程序应该为 deflate() 和 inflate() 提供相同的字典。2. 进行原始放气时,必须在任何放气调用之前或放气 block 完成后立即调用此函数,即在使用任何冲洗选项时消耗所有输入并交付所有输出之后 Z_BLOCK
、Z_PARTIAL_FLUSH
、Z_SYNC_FLUSH
或 Z_FULL_FLUSH
。 (来自 zlib 文档)。
但是下面的应用程序无法解压缩之前使用同一应用程序压缩的内容。压缩和解压缩成功,但输入和未压缩文件不匹配。
放气:
do {
ret = deflateSetDictionary(&strm, dictionary, sizeof(dictionary));
if(ret != Z_OK) {
fprintf(stderr, "Failed to set deflate dictionary\n");
return Z_STREAM_ERROR;
}
strm.avail_in = fread(in, 1, CHUNK, source);
if (ferror(source)) {
(void)deflateEnd(&strm);
return Z_ERRNO;
}
flush = feof(source) ? Z_FINISH : Z_FULL_FLUSH;
strm.next_in = in;
/* run deflate() on input until output buffer not full, finish
compression if all of source has been read in */
do {
strm.avail_out = CHUNK;
strm.next_out = out;
ret = deflate(&strm, flush); /* no bad return value */
assert(ret != Z_STREAM_ERROR); /* state not clobbered */
have = CHUNK - strm.avail_out;
if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
(void)deflateEnd(&strm);
return Z_ERRNO;
}
} while (strm.avail_out == 0);
assert(strm.avail_in == 0); /* all input will be used */
/* done when last data in file processed */
} while (flush != Z_FINISH);
assert(ret == Z_STREAM_END);
膨胀:
do {
ret = inflateSetDictionary(&strm, dictionary, sizeof(dictionary));
if(ret != Z_OK) {
fprintf(stderr, "Failed to set inflate dictionary\n");
return Z_STREAM_ERROR;
}
strm.avail_in = fread(in, 1, CHUNK, source);
if (ferror(source)) {
(void)inflateEnd(&strm);
return Z_ERRNO;
}
if (strm.avail_in == 0)
break;
strm.next_in = in;
/* run inflate() on input until output buffer not full */
do {
strm.avail_out = CHUNK;
strm.next_out = out;
ret = inflate(&strm, Z_FULL_FLUSH);
assert(ret != Z_STREAM_ERROR); /* state not clobbered */
switch (ret) {
case Z_NEED_DICT:
ret = Z_DATA_ERROR; /* and fall through */
case Z_DATA_ERROR:
case Z_MEM_ERROR:
(void)inflateEnd(&strm);
return ret;
}
have = CHUNK - strm.avail_out;
if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
(void)inflateEnd(&strm);
return Z_ERRNO;
}
} while (strm.avail_out == 0);
/* done when inflate() says it's done */
} while (ret != Z_STREAM_END);
最佳答案
放气时,您为每个 CHUNK
输入字节设置相同的字典。为什么?您应该在 deflateInit2()
之后使用一次 deflateSetDictionary()
。从那时起,输入数据本身应该作为比您可能提供的字典更好的匹配字符串来源。
在膨胀方面,您必须知道压缩 block 的结束位置,以便您可以在与压缩时完全相同的位置执行 inflateSetDictionary()
。这将需要某种标记、计数或搜索完整冲洗模式。
关于c - 如何将放气/膨胀 SetDictionary 与原始放气/膨胀一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702486/
我在启动时为我的 mac 应用程序进行时间分析,我不记得在雪豹中看到过这个类,但不能确定。有谁知道它是做什么用的? 最佳答案 这是 Lions 的新功能,用于保存和恢复窗口状态(如位置等)。它通过压缩
我有一些想法想要尝试与数据压缩相关,但我发现很难破译该标准在“现实生活中”如何应用的某些部分。我想查看一些示例压缩文件,以观察 block 的排列方式以及哈夫曼树的结构。 是否有任何工具可以帮助可视化
这个问题已经有答案了: python: read lines from compressed text files (4 个回答) 已关闭 8 年前。 我使用以下生成器以内存高效的方式逐行迭代给定的
我正在向 cloudfront CDN 发出请求并看到非常令人沮丧的行为。在 chrome 和 firefox 中,请求传递了正确的 accept-encoding:gzip, deflate hea
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
总结:我需要一个 PNG 编写器,出于各种原因我不得不从头开始。我不需要压缩图像数据,所以我使用无压缩 deflate 算法实现了 PNG。需要多个压缩 block 的图像渲染失败,似乎是因为它忽略了
是否有隐藏在 Internet 中的 ByteBuffers 方面的 gzip-deflating 库?允许我们推送原始数据然后提取缩减数据的东西?我们搜索了它,但只找到处理 InputStreams
我正在使用 zlib压缩文本数据流。文本数据以 block 的形式出现,对于每个 block ,deflate()被调用,flush 设置为 Z_NO_FLUSH .检索到所有 block 后,def
我已在网站的 .htaccess 文件中指定了以下属性: AddOutputFilterByType DEFLATE image/svg+xml DeflateCompressionLevel 9 H
我是一名优秀的程序员,十分优秀!