有人可以向我解释一下zlib库在Nodejs中的工作原理吗?
我是Nodejs的新手,我还不确定如何使用缓冲区和流.
我的简单场景是一个字符串变量,我想要将字符串压缩或解压缩(放气或膨胀,gzip或gunzip等)到另一个字符串.
即(我希望它如何工作)
var zlib = require('zlib');
var str = "this is a test string to be zipped";
var zip = zlib.Deflate(str); // zip = [object Object]
var packed = zip.toString([encoding?]); // packed = "packedstringdata"
var unzipped = zlib.Inflate(packed); // unzipped = [object Object]
var newstr = unzipped.toString([again - encoding?]); // newstr = "this is a test string to be zipped";
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助:)
我正在寻找一个关于zlib的好教程.我只对解压缩档案感兴趣.我还想知道如何在存档中访问所需的文件,最好是单独使用文件名,如果可以在zlib中完成的话.
我试图找出用Python压缩流的最佳方法zlib.
我有一个类似文件的输入流(input,下面)和一个输出函数,它接受类似文件(output_function,下面):
with open("file") as input:
output_function(input)
Run Code Online (Sandbox Code Playgroud)
我想input在发送之前对gzip压缩块进行压缩output_function:
with open("file") as input:
output_function(gzip_stream(input))
Run Code Online (Sandbox Code Playgroud)
看起来gzip模块假定输入或输出都是gzip的磁盘文件...所以我假设zlib模块是我想要的.
但是,它本身并没有提供一种简单的方法来创建类似于文件的流......而它支持的流压缩是通过手动将数据添加到压缩缓冲区,然后刷新缓冲区来实现的.
当然,我可以写一个包装器zlib.Compress.compress和zlib.Compress.flush(Compress由它返回zlib.compressobj()),但我担心缓冲区大小错误或类似的东西.
那么,使用Python创建流式,gzip压缩文件的最简单方法是什么?
编辑:为了澄清,输入流和压缩输出流都太大output_function(StringIO(zlib.compress(input.read())))而不适合内存,所以类似的东西并没有真正解决问题.
我正在尝试编译一个同时使用libjpeg和libpng的项目.我知道libpng需要zlib,所以我独立编译了所有三个并将它们(libjpeg.a,libpng.a和libz.a)放在一个名为的文件夹中linrel32.我执行的是:
g++ -Llinrel32/ program.cpp otherfile.cpp -o linrel32/executable -Izlib/ -Ilpng140/ -Ijpeg/ -lpthread -lX11 -O2 -DLINUX -s -lz -lpng -ljpeg
所以我包括了三个库.仍然,链接器抱怨:
linrel32//libpng.a(png.o): In function `png_calculate_crc':
png.c:(.text+0x97d): undefined reference to `crc32'
linrel32//libpng.a(png.o): In function `png_reset_crc':
png.c:(.text+0x9be): undefined reference to `crc32'
linrel32//libpng.a(png.o): In function `png_reset_zstream':
png.c:(.text+0x537): undefined reference to `inflateReset'
linrel32//libpng.a(pngread.o): In function `png_read_destroy':
pngread.c:(.text+0x6f4): undefined reference to `inflateEnd'
linrel32//libpng.a(pngread.o): In function `png_read_row':
pngread.c:(.text+0x1267): undefined reference to `inflate'
linrel32//libpng.a(pngread.o): In function `png_create_read_struct_2':
Run Code Online (Sandbox Code Playgroud)
(...你明白了:D)
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我知道缺少的函数来自zlib,我在那里添加了zlib.打开libz.a,似乎有一个很好的结构.重新编译它,一切看起来都很好.但它不是...... …
我想从tmx文件中获取压缩层数据.谁知道在javascript中解压缩gzip和zlib字符串的库?我尝试zlib但它对我不起作用.例如,tmx文件中的图层数据是:
<data encoding="base64" compression="zlib">
eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==
</data>
Run Code Online (Sandbox Code Playgroud)
我的javascript代码是
var base64Data = "eJztwTEBAAAAwqD1T20JT6AAAHgaCWAAAQ==";
var compressData = atob(base64Data);
var inflate = new Zlib.Inflate(compressData);
var output = inflate.decompress();
Run Code Online (Sandbox Code Playgroud)
它运行时显示消息错误"不支持的压缩方法".但我尝试使用在线工具解压缩为http://i-tools.org/gzip,它返回正确的字符串.
我有一组(巨大的)类似的数据文件.该集合不断增长.单个文件的大小约为10K.每个文件都必须自己压缩.使用zlib库完成压缩,该库由java.util.zip.Deflater类使用.使用字典将字典传递给Deflate算法时setDictionary,我可以提高压缩率.
有没有办法(算法)找到'最佳'字典,即具有整体最佳压缩比的字典?
请参阅zlib手册
谁能告诉我使用mod_deflate和zlib output_compression之间的区别?
我知道zlib是用PHP完成的,而mod_deflate是在Apace中完成的,我的.htaccess文件看起来像:
php_flag zlib.output_compression On
Run Code Online (Sandbox Code Playgroud)
要么:
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png|gif)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
Run Code Online (Sandbox Code Playgroud)
两者的优点/缺点是什么?
我正在潜入node.js的Zlib.我能够使用提供的示例(http://nodejs.org/api/zlib.html#zlib_examples)压缩和解压缩文件,但我无法找到有关为文件夹执行相同操作的更多信息?
一种可能性(但我认为是修补)是使用node-zip模块并逐个添加文件夹的所有文件.但是在解压缩时我会遇到问题(在这种情况下我会丢失文件夹).
知道如何使用Node.js压缩(然后解压缩)整个文件夹(尊重子焊工层次结构)?
谢谢.
我正在开发一个对象检测项目,并希望使用我的 GPU 处理该项目。我已经完成了NVIDIA 设置教程,一切正常。我的对象检测代码最初适用于 CPU,但是当我添加这两行代码时:
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)
Run Code Online (Sandbox Code Playgroud)
显示的输出:
无法找到 zlibwapi.dll。请确保它在您的库路径中!
我已经从cuDNN 网站下载了 zlibwapi.dll zip 文件,解压缩并将整个文件夹添加到我的环境变量路径中。该文件夹名为“zlib123dllx64”,包含“dll_x64”文件夹和“static_x64”文件夹。“zlibwapi.dll”位于“dll_x64”文件夹内。我已在用户和系统路径变量中添加了“zlib123dllx64”文件夹,但它似乎没有解决任何问题。我怎样才能修复这个错误并使GPU与代码一起工作?
我的环境设置:
以下代码将压缩一个文件.如何压缩多个文件
var gzip = zlib.createGzip();
var fs = require('fs');
var inp = fs.createReadStream('input.txt');
var out = fs.createWriteStream('input.txt.gz');
inp.pipe(gzip).pipe(out);
Run Code Online (Sandbox Code Playgroud)