我正在使用zlib.NET库来尝试和扩充由zlib压缩的文件(也许在Linux机器上).这是我正在做的事情:
zlib.ZInputStream zinput =
new zlib.ZInputStream(File.Open(path, FileMode.Open, FileAccess.Read));
while (stopByte != (data = zinput.ReadByte()))
{
// check data here
}
zinput.Close();
Run Code Online (Sandbox Code Playgroud)
数据字节与压缩数据字节匹配,因此我必须做错事.
是否有一个类允许使用Zlib压缩数据,或者直接使用zlib.dylib是我唯一的可能性?
我想.gz使用gzopen函数打开一个文件,我收到此错误:
Fatal error: Call to undefined function gzopen()
Run Code Online (Sandbox Code Playgroud)
这里有一些关于我安装的细节:
OS : Ubuntu 10.04 up to date
Apache version : 2.2.14
PHP : 5.2.10-2ubuntu6
Run Code Online (Sandbox Code Playgroud)
在这Zlib部分中phpinfo(),我有这个:
ZLib Support enabled
Stream Wrapper support compress.zlib://
Stream Filter support zlib.inflate, zlib.deflate
Compiled Version 1.2.3.3
Linked Version 1.2.3.3
zlib.output_compression Off
zlib.output_compression_level -1
zlib.output_handler no value
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
我正在使用delphi 7并且需要解压缩包含多个文件的压缩zip文件,我找到了如何使用ZLib解压缩单个文件的示例,但是在zip中找不到任何带有多个文件的示例,是否可以有人要么给我一个例子,要么指向一个方向
谢谢
科林
root@li417-132:~# rvm pkg install zlib
Fetching zlib-1.2.7.tar.gz to /usr/local/rvm/archives
There is no checksum for 'http://prdownloads.sourceforge.net/libpng/zlib-1.2.7.tar.gz' or 'zlib-1.2.7.tar.gz', it's not possible to validate it.
If you wish to continue with unverified download add '--verify-downloads 1' after the command.
Please note that it's required to reinstall all installed rubies:
rvm reinstall all --force
rvm all-gemsets do rvm gemset pristine
Run Code Online (Sandbox Code Playgroud)
今天发生了一个奇怪的问题,我前几天设置的其他linux机箱从来没有这样做,但今天我无法安装任何rvm软件包,并且在命令之后添加'--verify-downloads 1'似乎根本没有任何影响.
我有一个大的数据文件,我用Zlib使用boost IOStreams和过滤流缓冲区压缩:
boost::iostreams::array_source uncompressedArray( reinterpret_cast< const char* >( &uncompressedData[0] ), uncompressedData.size() );
boost::iostreams::filtering_streambuf< boost::iostreams::output > out;
out.push( *m_compressor );
out.push( boost::iostreams::char_back_inserter( compressedData ) );
boost::iostreams::copy( uncompressedArray, out );
Run Code Online (Sandbox Code Playgroud)
为了速度我正在使用以下内容初始化zlib库:
boost::iostreams::zlib_params params;
params.level = boost::iostreams__zlib::best_speed;
params.mem_level = 9;
m_compressor.reset( new boost::iostreams::zlib_compressor( params, 131072 ) );
m_decompressor.reset( new boost::iostreams::zlib_decompressor( params, 131072 ) );
Run Code Online (Sandbox Code Playgroud)
我的解压缩器看起来像这样:
boost::iostreams::array_source compressedArray( reinterpret_cast< const char* >( &compressedData[0] ), compressedData.size() );
boost::iostreams::filtering_streambuf< boost::iostreams::input > m_in;
m_in.push( *m_decompressor );
m_in.push( compressedArray );
boost::iostreams::copy( m_in, boost::iostreams::char_back_inserter( uncompressedData ) );
Run Code Online (Sandbox Code Playgroud)
我的问题是,有什么方法可以加快膨胀(减压)操作?现在,压缩占据了我数据访问时间的大约83%,我真的需要更快地实现这一点.任何建议将不胜感激.
我试图通过逐渐将字符串(由换行符分隔的JSON)传输到它来创建.gz文件.
使用节点0.11和0.12(两者都具有相同的reasult,.gz文件将无法打开).
我将代码缩减为:
var fs = require('fs');
var output = fs.createWriteStream('test.gz');
var zlib = require('zlib');
var compress = zlib.createGzip();
var myStream = compress.pipe(output);
myStream.write('Hello, World!');
myStream.end();
Run Code Online (Sandbox Code Playgroud)
该文件已创建,但我无法打开它.我究竟做错了什么?
我通过套接字从python发送数据到java.
所以在python 2.7方面,我有:
s = "this is test str"
compressed = s.encode('zlib')
push_to_tcp_socket(compressed)
Run Code Online (Sandbox Code Playgroud)
所以我需要在java端恢复初始字符串.我怎么能这样做?
我似乎停留在通过Amazon SQS将压缩消息从PHP发送到NodeJS上。
在PHP方面,我有:
$SQS->sendMessage(Array(
'QueueUrl' => $queueUrl,
'MessageBody' => 'article',
'MessageAttributes' => Array(
'json' => Array(
'BinaryValue' => bzcompress(json_encode(Array('type'=>'article','data'=>$vijest))),
'DataType' => 'Binary'
)
)
));
Run Code Online (Sandbox Code Playgroud)
注意1:我也尝试将压缩数据直接放入消息中,但是该库给我一个错误,其中包含一些无效的字节数据
在节点方面,我有:
body = decodeBzip(message.MessageAttributes.json.BinaryValue);
Run Code Online (Sandbox Code Playgroud)
消息来自sqs.receiveMessage()调用,该部分有效,因为它适用于原始(未压缩的消息)
我得到的是TypeError:格式不正确
我也尝试使用:
PHP-节点
gzcompress()-zlib.inflateraw()
gzdeflate()-zlib.inflate()
gzencode()-zlib.gunzip()
这些对中的每对都给了我相同错误的版本(本质上,输入数据是错误的)
考虑到所有这些,我开始怀疑消息传输中存在错误
我究竟做错了什么?
编辑1:似乎错误发生在传输中,因为php中的bin2hex()和Node中的.toString('hex')返回完全不同的值。似乎PHP中的Amazon SQS API使用base64传输BinaryAttribute,但是Node无法对其进行解码。我设法通过关闭Amazon aws配置文件中的自动转换,然后在node中手动解码base64来部分解码它,但是它仍然无法解码。
编辑2:通过在php端使用base64_encode(),并将base64作为messageBody发送(不使用MessageAttributes),我设法完成了同样的事情。在节点侧,我使用了新的Buffer(messageBody,'base64'),然后在其上使用了解码Bzip。一切正常,但是我仍然想知道为什么MessageAttribute无法正常工作。当前的base64增加了开销,我喜欢按预期使用服务,而不是通过变通办法。
<command line>: can't load .so/.DLL for: libz.so (libz.so: cannot open shared object file: no such file or directory)
这是我在尝试安装某些WAI库时遇到的错误:
这似乎与模板Haskell有动态链接问题有关.链接到zlib(或libz或z或libz1g或其他任何月份包管理器选择调用标准压缩库的味道)的其他包工作正常,只有那些试图在编译时动态链接到它的包时间.
我用过 nix-env -i zlib && nix-shell -p zlib
我做apt-get install的 zlib1g,zlib1g-dev,lib32z1,zlib1g:i386,的libc6-I386, ,lib32stdc++6,lib32gcc1(?!)lib32ncurses5其他zlib的问题的建议.
whereis libz.so给人/usr/lib/x86_64-linux-gnu/libz.a /usr/lib/x86_64-linux-gnu/libz.so所以我觉得库实际安装.
我通过剥离所有的TH代码得到了一个精简版的wai-app-static工作,但我无法在不打破整个包的情况下从wai-websockets中提取它.
有没有人找到一种方法来安装这些库,最好是使用Nix,但是在这一点上我可以实现它.我已经尝试了三天来获得一个有效的构建,并且已经耗费了整个星期的项目时间,而没有编写我自己的代码.我会采取任何可行的黑客攻击.
有人要求使用命令行.这是由cabal生成的:
/home/jfmiller28/.nix-profile/bin/ghc --make -fbuilding-cabal-package -O -static -dynamic-too -dynosuf dyn_o -dynhisuf dyn_hi -outputdir dist/build -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build …Run Code Online (Sandbox Code Playgroud) zlib ×10
compression ×2
node.js ×2
php ×2
.net ×1
amazon-sqs ×1
boost ×1
c# ×1
c++ ×1
delphi ×1
delphi-7 ×1
haskell ×1
haskell-wai ×1
java ×1
objective-c ×1
performance ×1
python ×1
ruby ×1
rvm ×1
stream ×1
yesod ×1