标签: zlib

zlib:C 中线程安全的 zalloc 和 zfree?

我正在使用 zlib C 库解压缩从网络流接收的数据,并且我有两个流在两个单独的 NSThread 中运行。根据 zlib 文档,在两个线程中解压缩两个不同的 zlib 流需要 zalloc 和 zfree 是线程安全的。我目前正在传递 Z_NULL (下面是我的 inflateinit 代码)

zStream.zalloc = Z_NULL;
zStream.zfree = Z_NULL;
zStream.opaque = Z_NULL;
zStream.avail_in = 0;
zStream.next_in = Z_NULL;
int status = inflateInit(&zStream);
if (status != Z_OK)
    DLog(@"zlib setup error");
else
    DLog(@"zlib setup ok");
});
Run Code Online (Sandbox Code Playgroud)

有人有使用 zlib 在单独线程中压缩多个流的经验吗?有人见过 zalloc 和 zfree 的线程安全实现吗?

malloc multithreading zlib objective-c

3
推荐指数
1
解决办法
2168
查看次数

在windows上使用zlib编译boost

有没有关于如何在 Windows 上使用 zlib 编译 boost 的好教程。\n我查看了 boost 参考,但它很模糊并且不够。\n我确实下载了 zlib dll 和源代码并在 Visual Studio 中进行了参考。\n我的链接有错误

\n\n
gzip_decompressor();\n
Run Code Online (Sandbox Code Playgroud)\n\n

完整代码:

\n\n
using namespace boost::iostreams;\nusing namespace std;\nstd::ifstream file("hello.gz", std::ios_base::in | std::ios_base::binary);\nfiltering_streambuf < input > in;\nin.push(gzip_decompressor());\nin.push(file);\nboost::iostreams::copy(in, std::cout);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到这个错误,

\n\n
\n

错误 11 错误 LNK2019:无法解析的外部符号“_declspec(dllimport) public: __thiscall\n boost::iostreams::detail::gzip_header::~gzip_header(void)”\n (__imp??1gzip_header@detail@iostreams@boost@ @QAE@XZ) 在函数“public: __thiscall\n boost::iostreams::basic_gzip_decompressor\n \\>::~basic_gzip_decompressor >(void)”中引用 (??1?$basic_gzip_decompressor@V?$allocator@ D@std@@@iostreams@boost@@QAE@XZ)\n \xe2\x80\x93

\n
\n

c++ boost zlib boost-iostreams

3
推荐指数
1
解决办法
5269
查看次数

是否有一个 inflate (zlib/miniz) 函数可以返回 inflate/decompress 大小的上限?

我知道 zlib/miniz 提供了 compressBound,它根据纯文本大小返回 deflate/compress 大小的上限。那很方便。

是否有一个 inflate (zlib/miniz) 函数可以返回 inflate/decompress 大小的上限?还是一个简单的公式就能决定?喜欢:

decompress size = compressed size * factor
Run Code Online (Sandbox Code Playgroud)

zlib deflate inflate

3
推荐指数
1
解决办法
1421
查看次数

Python zlib 扩展未在 Mac OS X 10.11.1 上编译

当我构建 Python 2.7.11 时,发生以下构建错误。

错误:Python zlib 扩展未编译。缺少 zlib?

我的构建环境是:

  • Mac OS X 10.11.1
  • Python 2.7.11

python zlib osx-elcapitan

3
推荐指数
2
解决办法
1万
查看次数

如何在android中访问ZLIB库方法?

在我的 android 项目中执行 ndk-build 后,我添加了 zlib 库。但是在 Android 应用程序中调用哪种方法来压缩文件夹呢?我已将其用作 zlib ndk ZLIB NDK 文件

zip android zlib android-ndk

3
推荐指数
1
解决办法
1万
查看次数

使用 zlib 压缩 boost 二进制存档

我正在尝试压缩序列化的 boost 存档而不使用临时文件。我设法让它与临时文件一起工作,所以我正在尝试解决它的代码。

class MyClass {
public:
  int a;
  std::string b;
  template<class Archive> void serialize( Archive & arc, const unsigned int version ){
    arc & a & b;
  }
};

int main(){
  MyClass mc{ 4, "This is a somewhatishly long string." };

  std::ostringstream oss;
  boost::archive::binary_oarchive bo( oss );    
  bo << mc;

  std::ofstream ofs( "save.z", std::ios::out | std::ios::binary );
  boost::iostreams::filtering_ostreambuf fos;
  fos.push( boost::iostreams::zlib_compressor( boost::iostreams::zlib::best_compression ) );
  fos.push( bo );
  boost::iostreams::copy( fos, ofs );
}
Run Code Online (Sandbox Code Playgroud)

问题是我收到了两打模板编译错误fos.push(bo)

c++ boost zlib

3
推荐指数
1
解决办法
2028
查看次数

python zlib如何解压多个对象

我尝试在我的文件上写入许多 zlib 块,有没有办法可以从我的文件中获取所有未压缩的内容?从下面的示例代码我只能得到我的第一个数据。预先感谢您的任何意见!

Python 3.6.8 |Anaconda, Inc.| (default, Dec 29 2018, 19:04:46) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import zlib
>>> str1 = b'my first string'
>>> str2 = b'my second string'
>>> z1 = zlib.compress(str1)
>>> z2 = zlib.compress(str2)
>>> with open('test.z', 'wb') as fh:
...     fh.write(z1)
...     fh.write(z2)
... 
23
24
>>> p = open('test.z','rb').read()
>>> p
b'x\x9c\xcb\xadTH\xcb,*.Q(.)\xca\xccK\x07\x00.6\x05\xe6x\x9c\xcb\xadT(NM\xce\xcfKQ(.)\xca\xccK\x07\x003\xfb\x06:'
>>> zlib.decompress(p)
b'my first string'
>>> zlib.decompress(p)
b'my …
Run Code Online (Sandbox Code Playgroud)

python zlib

3
推荐指数
1
解决办法
2049
查看次数

zlib解压后得到与原始文件不同的大小

我有来自 .PDF 的原始数据集,并尝试解压缩和压缩它们而不丢失数据。

这是我的一些代码:

# Decompression
decompress_data = zlib.decompress(open('test.raw', 'rb').read())
decompress_file = open('test.raw.temp', 'wb')
decompress_file.write(decompress_data)
decompress_file.close()

# Compression
compress_data = zlib.compress(open('test.raw.temp', 'rb').read())
compress_file = open('test.raw_', 'wb')
compress_file.write(compress_data)
compress_file.close()
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我解压缩test.raw并获取临时数据,反之亦然。

所以得到了压缩文件 -test.raw_但问题是它的大小与原始原始数据不同 - test.raw

当我更改压缩级别时,解压缩和压缩的大小保持不同。

星期四 hxd 编辑器我知道原始原始文件有默认的压缩标头 - 789C.

CMF |  FLG
0x78 | 0x01 - No Compression/low
0x78 | 0x9C - Default Compression
0x78 | 0xDA - Best Compression 
Run Code Online (Sandbox Code Playgroud)

由此看来,我认为最好的压缩级别是6. 它返回相同的标头,但大小仍然不同。

我在哪里取得了错误的进展?

请帮我。

python pdf zlib

3
推荐指数
1
解决办法
875
查看次数

解码 base45 字符串,生成 cbor 压缩文件

你好,我正在尝试读取我的绿通证书,我知道当你扫描二维码时,它会出现类似 HC1:NHFDFGDF...... 的内容,我也知道这是编码为 base45 的,所以我做了一个小小的 javascript 解码器,这是我的代码:

\n
const base45 = require(\'base45\');\n\n//of course my personal HC1: isnt here\nconst encodedData = \'C0C9BQF2LVU.TMBX4KDL*XD/GPWBILC9GGBYPLR-SAG1CSQ6U7SSQY%SJWLK34JWLG56H0API0TUL:12>\'\n\nconst decodedData = base45.decode(encodedData).toString(\'utf-8\');\n\nconsole.log(decodedData);\n
Run Code Online (Sandbox Code Playgroud)\n

这是回应:

\n
x\xda\xbb\xef\xbf\xbd\xe2\xbb\x88Q\xef\xbf\xbd\xef\xbf\xbdC#?\xef\xbf\xbd\xef\xbf\xbd-E\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdK\xef\xbf\xbdBX\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd6\xb3I%|\xef\xbf\xbdzl\xef\xbf\xbd\xc8\xbc\xef\xbf\xbdqIbY\xe3\xaa\xa4\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbd\xd2\xa2<\xef\xbf\xbd\xd2\xb2\xef\xbf\xbdL\xef\xbf\xbd\xef\xbf\xbd ?\xef\xbf\xbd\xef\xbf\xbd0gO+C\xef\xbf\xbd\xef\xbf\xbd+\xef\xbf\xbd`\xef\xbf\xbd\xef\xbf\xbd`\xd7\x800\xef\xbf\xbdH\'W\xef\xbf\xbdP\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdWwe\xcf\xa4\xef\xbf\xbd|\xef\xbf\xbd\xef\xbf\xbdI)yLI)%YFF\xef\xbf\xbd\xef\xbf\xbdf\xef\xbf\xbdFfI\xef\xbf\xbd\xc5\xa5\xef\xbf\xbd\xef\xbf\xbdy\xef\xbf\xbd\xef\xbf\xbd%\xef\xbf\xbdWe\xef\xbf\xbd+\xef\xbf\xbd$*\'\xde\x95\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdkh\xef\xbf\xbdf\xef\xbf\xbd\xef\xbf\xbdI\xef\xbf\xbd9\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbdI\xef\xbf\xbd)LI%\xef\xbf\xbd&\xef\xbf\xbd\xc6\x96fIeY\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd)\xef\xbf\xbdIY\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF {\n                                                                                                                                            \xef\xbf\xbdsVp\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd*8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdz\xef\xbf\xbd8*\xef\xbf\xbd\xef\xbf\xbd:;\'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n     pMN\xef\xbf\xbd+*\xef\xbf\xbd\xef\xbf\xbd*\xef\xbf\xbd+JN\xef\xbf\xbd+\xef\xbf\xbd\xef\xbf\xbd  \xef\xbf\xbd\n                         \xef\xbf\xbd\xef\xbf\xbd**K-J5\xef\xbf\xbd3\xef\xbf\xbd3\xef\xbf\xbdp8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdyM]\xef\xbf\xbdo\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdE\xef\xbf\xbd_\xef\xbf\xbd\xef\xbf\xbdO.\xef\xbf\xbd\xcf\xa9\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbdg\xef\xbf\xbd\xcb\xbd\xef\xbf\xbd\xef\xbf\xbd\\\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd="\xef\xbf\xbd\xef\xbf\xbd]\xdb\xb7\n\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd{\xef\xbf\xbd\xef\xbf\xbdKq \xef\xbf\xbd\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n

我读到的是,它的 base45 解码将导致 zlib 压缩文件,其中解压将导致 CBOR Web 令牌,但我卡住了,你能帮助我吗?这个结果正常吗?我还在学习

\n

javascript qr-code zlib certificate cbor

3
推荐指数
1
解决办法
1万
查看次数

如何在Erlang中使用zlib压缩列表并将其解压缩?

假设我想压缩以下列表并将压缩版本保存在RAM中:

List = lists:seq(1,100000).
Run Code Online (Sandbox Code Playgroud)

官方文档中提供的示例对我不起作用 - 我得到了未绑定变量的错误Read,我不明白它的用途(它是函数还是变量?).

我试图在网上搜索,但我发现的唯一一件事就是解压缩文件.

所以,问题是:如何在Erlang List的帮助下压缩列表并将其解压缩zlib?我怎样才能看到List它和它的压缩对应物消耗了多少内存?

compression erlang zlib

2
推荐指数
2
解决办法
1666
查看次数