标签: zlib

如何zlib压缩QByteArray?

我希望在压缩文本时保持地球上其他所有应用程序(包括Web应用程序)之间的互操作性.由于qCompress和qUncompress似乎与谷物相反,我试图直接从我的Qt应用程序中使用zlib.

我将接受最简单(最简单)的答案,它向我展示如何直接使用带有QByteArray的zlib库修改qCompress的输出,以便它可以在Qt应用程序之外使用.

这是我的尴尬尝试:

QByteArray tdata = QString("Oh noes!").toUtf8();
QByteArray cdata;
uLongf len = 12 + 1.002*tdata.length();
compress(&cdata, &len, &tdata, tdata.length());
Run Code Online (Sandbox Code Playgroud)

而错误:

错误:无法将'QByteArray*'转换为'Bytef*'以将参数'1'转换为'int compress(Bytef*,uLongf*,const Bytef*,uLong)'

然后我尝试使用QByteArray :: constData()

compress(cdata.constData(), &len, &tdata, tdata.length());
Run Code Online (Sandbox Code Playgroud)

但得到以下错误:

错误:从'const char*'到'Bytef*'的无效转换

我不知道Bytef是什么,所以我开始查看zlib源代码进行调查.但我能找到的就是QtSources/src/3rdparty/zlib/zconf.h

# define Bytef                 z_Bytef
Run Code Online (Sandbox Code Playgroud)

所以现在我迷失了.

c++ qt zlib

6
推荐指数
1
解决办法
7370
查看次数

从python中的二进制文件中提取zlib压缩数据

我的公司使用遗留文件格式的Electromiography数据,不再生产.但是,有一些兴趣保持复古兼容性,所以我正在研究为该文件格式编写阅读器的可能性.

通过分析用Delphi编写的非常复杂的前源代码,文件读取器/写入器使用ZLIB,并且在HexEditor内部看起来像二进制ASCII中的文件头("Player","Analyzer"等字段易读),后跟包含原始数据的压缩字符串.

我的疑问是:我应该如何进行以确定:

  • 如果是压缩流;
  • 压缩流从何处开始,在何处结束;

来自维基百科:

zlib压缩数据通常使用gzip或zlib包装器编写.包装器通过添加标题和尾部来封装原始DEFLATE数据.这提供了流识别和错误检测

这有关系吗?

我很乐意发布更多信息,但我不知道什么是最相关的.

谢谢你的任何提示.

编辑:我有工作应用程序,可以用它来记录任何时间长度的实际数据,如果需要,文件甚至小于1kB.


一些示例文件:

一个新创建的,没有数据流:https://dl.dropbox.com/u/4849855/Mio_File/HeltonEmpty.mio

保存非常短(1秒?)的数据流之后,如上所述:https://dl.dropbox.com/u/4849855/Mio_File/HeltonFilled.mio

另一个来自名为"manco"而不是"Helton"的患者,具有更短的流(非常适合Hex观看):https://dl.dropbox.com/u/4849855/Mio_File/manco_short.mio

说明:每个文件应该是患者(一个人)的文件.在这些文件中,保存一个或多个考试,每个考试由一个或多个时间序列组成.提供的文件只包含一个考试,其中包含一个数据系列.

language-agnostic compression binaryfiles zlib

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

GZIP CSS完全打破页面

谢谢你的光临.我自己真的尝试过这个,但是再一次对我来说似乎太过分了.

情况......


我和我自己的网站住在一个共享的主机上.当我想要压缩我的大量cms生成的js和css以使PageSpeedInsights和我自己开心时,我读到它并最终发现我的主机没有安装mod_gzip和mod_deflate.安装的是ZLIB.所以我搜索了.找到了典型的php附加解决方案并且不喜欢它.为htaccess找到了一些简洁的代码,这让我很开心因为他们马上工作了:

AddHandler application/x-httpd-php .html .htm .php .js
php_flag output_buffering On
php_value output_handler ob_gzhandler
php_flag zlib.output_compression Off
Run Code Online (Sandbox Code Playgroud)

我通过使用GIDZipTest确认它正在工作.这一切都很好,我喜欢它.

但是只要我将.css放到AddHandler列表中,我的页面就会完全中断.
我尝试使用带有ob_gzhandlerphp解决方案仅用于css文件,但它最终完全没有工作.只是做什么都没有.


解决方法吗?(并不是的)


我手动缩小了所有的CSS并上传了每个文件的css.gz版本,并提供了它

RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
Run Code Online (Sandbox Code Playgroud)

这也很好.


的问题!


  1. 我需要为css压缩定义/指定什么才能工作?我觉得我只是错过了一些转换的东西......

  2. 当我将我的手动缩小的.css.gz文件提供给客户端时,它们是否仍会被额外压缩?

  3. 这会在文件大小方面有任何进一步的优势吗?或者我应该坚持使用手动提供的版本并提供关于Google PageSpeed的**?
    (即使对于缩小的文件,GIDZipTest仍会显示"如果"场景,这是令人印象深刻的数字,说实话.我想那样......)

提前感谢您给出的任何评论.
此致

玛丽安

css compression .htaccess gzip zlib

6
推荐指数
1
解决办法
1912
查看次数

如何为arm64构建zlib

我使用一个开源渲染库(Ogre3D),它依赖于zlib.

在XCode5中,我注意到在构建iOS时,如果ARCHS设置指示64位(arm64)体系结构,则不会构建zlib.

我得到关于LSEEKreadwrite函数的"隐式函数声明"的错误.我抬头看了LSEEKgzlib.c:

#if defined(_WIN32) && !defined(__BORLANDC__)
#  define LSEEK _lseeki64
#else
#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
#  define LSEEK lseek64
#else
#  define LSEEK lseek
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

我的猜测是错误的,但我不知道是什么.至于read()write()我没有任何线索.

xcode zlib ogre ios arm64

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

使用javascript在Web浏览器中使用Ungzip csv文件

我想从Web服务器下载gzipped csv文件,然后在浏览器中下载ungzip.

到目前为止,我已尝试使用pakozlib在我的服务器上取一个文件gzip,但有各种问题.试图解压缩unix-gzip文件,我不断收到错误的标题消息.

接下来,我尝试使用node来压缩服务器上的文件,目前我收到此错误

Uncaught Error: invalid file signature:,?
Run Code Online (Sandbox Code Playgroud)

这是我用来获取文件的命令:

$.ajax({ type: "GET", url: 'public/pols_zlib.csv.gz'})
  .done(function(d){
    var gunzip = new Zlib.Gunzip(d);
    plain = gunzip.decompress(); 
  });
Run Code Online (Sandbox Code Playgroud)

我正在寻找任何方式来压缩我的服务器上的文件并在浏览器中解压缩它.

javascript browser zlib

6
推荐指数
1
解决办法
3329
查看次数

zlib,严厉的编译器警告和配置测试

我正在尝试从命令行编译zlib,我在使用时收到此消息-Wall -Wextra -Wconversion(完整的交叉编译脚本如下):

编译器错误报告对于./configure(可能是删除-Werror)来说太苛刻了 .

这是生成线的配置测试:

cat > $test.c << EOF
int foo() { return 0; }
EOF
echo "Checking for obsessive-compulsive compiler options..." >> configure.log
if try $CC -c $CFLAGS $test.c; then
  :
else
  echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
  leave 1
fi
Run Code Online (Sandbox Code Playgroud)

我不清楚究竟是什么判断过于严厉(特别是因为-Werror不存在).我也不太清楚测试中使用的示例程序是做什么的,所以我不清楚判断编译器警告"过于苛刻"的标准是什么.

什么是zlib抱怨太苛刻了?


#! /bin/sh

export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"

export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
export LD=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
export AR=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar
export RANLIB=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib

export CFLAGS="-Wall -Wextra -Wconversion …
Run Code Online (Sandbox Code Playgroud)

warnings zlib configure

6
推荐指数
1
解决办法
7364
查看次数

是否有可能从java.util.zip.Deflater中获取原始deflate?

zlib的文档指定一个可以传递一个负windowBits参数的deflateInit2()函数:

windowBits对于原始放气,也可以是-8 ..- 15 .在这种情况下,-windowBits 确定窗口大小.deflate()然后将生成deflate没有zlib头或尾部的原始数据,并且不会计算adler32检查值.

我在我的C代码中使用这一点,并在Java中我能够膨胀从而通过将压缩字节truenowrap参数给充气构造.

但是,将参数传递trueDeflater不会产生原始deflate.它返回的字节比我的C实现多20个字节,这肯定听起来像标题和校验和.(传递对于产量甚至更长字节数组).nowrapfalsenowrap

我已经扫描了 Deflater文档但是没有找到指定窗口位的方法或者我想要一个原始的deflate.这个图书馆可以吗?或者我是否需要使用其他一些实现来获取Java中的原始deflate?

java zlib

6
推荐指数
1
解决办法
1138
查看次数

Git DEFLATE /优化的zlib

我们在git中有一些非常大的存储库,在这些中我们已经观察到克隆/拉取时远程/服务器压缩是一个瓶颈.考虑到git已经变得多么普遍,并且使用了zlib,这个zlib压缩是否已经过优化?

英特尔的一篇论文详细介绍了如何在压缩比较小的情况下将DEFLATE压缩速度提高约4倍:

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-deflate-compression-paper.pdf

另一篇论文表明,对于大多数压缩'水平'(1-9),压缩比保持在~1.8倍的速度:

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/zlib-compression-whitepaper-copy.pdf

后一种优化似乎可以在github上找到:https://github.com/jtkukunas/zlib

zlib似乎已经很老了(在这个快节奏的行业中)最新版本是从2013年4月开始的.有没有尝试过SIMD优化zlib用于新一代处理器?或者有没有替代在git中使用zlib?

我知道你可以在git中指定一个会影响速度和压缩比的压缩级别.但是,上面表明可以在不损害压缩比的情况下对zlib进行相当大的性能改进.

那么回顾一下,是否有任何现有的git实现使用高度优化的zlib或zlib替代方案?

PS:似乎很多开发/服务器都会从中受益(即使是温室气体排放;)).

git optimization performance zlib deflate

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

如何Zlib膨胀Elixir中的字节列表?

给定Elixir中代表压缩文件的二进制文件,如何将它们传递给Erlang的zlib来进行膨胀?

compressed = <<120, 218, 237, 125, 123, 115, 28, 71, 126, ...>>
Run Code Online (Sandbox Code Playgroud)

我试过了:

z = :zlib.open()
uncompressed = :zlib.inflate(z, compressed)
:zlib.close(z)
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

** (ErlangError) erlang error: :einval
               :zlib.call/3     
               :zlib.inflate/2
Run Code Online (Sandbox Code Playgroud)

期待一个"iodata"作为一个论点,所以也许我只需要转换它?

zlib elixir

6
推荐指数
1
解决办法
907
查看次数

如何使用zlib支持构建增强功能?

我正在尝试使用zlib支持在Windows上构建Boost C++库版本1.65.1.我正在使用Conan包中的zlib库和我之前构建的zlib.我正在尝试了解使用zlib支持构建boost的正确步骤,以使用它们来创建Conan配方以进行提升.我试图按照官方增强文档中的说明进行操作.我设置环境变量ZLIB_LIBRARY_PATH,ZLIB_NAME以及ZLIB_INCLUDE通过以下方式:

set ZLIB_LIBRARY_PATH=C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\lib
set ZLIB_NAME=zlibstat
set ZLIB_INCLUDE=C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\include
Run Code Online (Sandbox Code Playgroud)

并且构建命令是:

.\b2.exe -j8 --prefix="C:\work\test_builds\boost\install\x64_shared_release" --build-dir="C:\work\test_builds\boost\build\x64_shared_release" --layout=system architecture=x86 address-model=64 toolset=msvc variant=release debug-symbols=on link=shared threading=multi runtime-link=shared install
Run Code Online (Sandbox Code Playgroud)

结果是:

 - zlib                     : no  (cached)
Run Code Online (Sandbox Code Playgroud)

我还尝试在运行之间清除boost build cash.

在此之后,我尝试直接从b2build命令设置环境变量:

.\b2.exe -j8 -sZLIB_LIBRARY_PATH="C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\lib"-sZLIB_NAME="zlibstat" -sZLIB_INCLUDE="C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\include" --prefix="C:\work\test_builds\boost\install\x64_shared_release" --build-dir="C:\work\test_builds\boost\build\x64_shared_release" --layout=system architecture=x86 address-model=64 toolset=msvc variant=release debug-symbols=on link=shared threading=multi runtime-link=shared install
Run Code Online (Sandbox Code Playgroud)

结果是一样的.

最后,我尝试通过project-config.jam以下方式将选项添加到文件中:

using zlib : 1.2.11 : <search>C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\lib <name>zlibstat <include>C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\igsoft\stable\package\63da998e3642b50bee33f4449826b2d623661505\include ;
Run Code Online (Sandbox Code Playgroud)

我再一次没有成功.

在zlib include文件夹中有子文件夹zlib.我还尝试了上面的3个变体,将路径设置为"../include/zlib".再没有成功.

如何使用zlib预先构建的Conan包使用zlib支持构建Boost?

c++ boost zlib boost-iostreams

6
推荐指数
1
解决办法
2179
查看次数