我有一个我试图压缩的对象.它的形式
[
{
array
string
},
{
array
string
},
...
]
Run Code Online (Sandbox Code Playgroud)
这些数组的长度不超过10-15,与字符串相比非常小(它们是html,长度大约为170k).虽然字符串通常是重复的,或者有大量的重叠.所以我的直觉告诉我压缩值应该是1个字符串的压缩值,加上一点额外的.
我JSON.stringify这个对象,并尝试压缩.
大多数压缩库在压缩字符串方面表现不佳,因为服务器向我发送了一个77kb的gzip压缩版本,我知道它至少可以这么小.
用gzip JS
LZMA-JS
在我尝试过的15个库中做得很好.
问题是gzip-js在字符串数量上是线性的.但是lzma正确地做到了这一点,它只是略微增加了尺寸.
不幸的是,当压缩7mb(约30~字符串)时,Lzma-js(2级)非常慢(20s vs 1s gzip).
有没有一个compressopn库,它大致和gzip一样快,但不能在重复字符串上线性缩放?
我正在寻找从服务器以压缩格式向客户端(带有ajax请求)发送数据,而不是使用浏览器解压缩该数据?有这个图书馆吗?
我不是在寻找压缩javascript文件!
编辑:我认为问题不够清楚,我不想压缩html文件,我想在服务器上存储一些压缩的LZMA文件或任何其他压缩格式(如obj文件),然后我需要在解压后解压缩它们我用AJAX得到它.不使用gzip同时压缩/解压缩.用Javascript获取后打开已经被zipeed的文件.
我知道如何创建zip存档:
import java.io.*;
import java.util.zip.*;
public class ZipCreateExample{
public static void main(String[] args) throws Exception
// input file
FileInputStream in = new FileInputStream("F:/sometxt.txt");
// out put file
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("F:/tmp.zip"));
// name the file inside the zip file
out.putNextEntry(new ZipEntry("zippedjava.txt"));
// buffer size
byte[] b = new byte[1024];
int count;
while ((count = in.read(b)) > 0) {
System.out.println();
out.write(b, 0, count);
}
out.close();
in.close();
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用lzma压缩.
我找到了这个项目:https://github.com/jponge/lzma-java,它创建压缩文件,但我不知道如何将它与我现有的解决方案结合起来.
我在我的应用程序中使用LZMA SDK有困难.
我想创建一种单文件压缩工具.我不需要任何目录支持,只需要LZMA2流.但我不知道如何使用LZMA SDK.
请问有谁能给我一个关于如何在C++下使用LZMA SDK的例子?
我试图用LzmaLib的LzmaCompress()和LzmaDecompress()与缓冲,适应提供的例子在这里.
我正在使用~3MB缓冲区进行测试,并且压缩函数似乎工作正常(产生~1.2MB的压缩缓冲区),但是当我尝试解压缩时,它只提取~300字节并返回SZ_ERROR_DATA.
提取的少数字节是正确的,但我不知道为什么它会停在那里.
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include "LzmaLib.h"
void compress(
unsigned char **outBuf, size_t *dstLen,
unsigned char *inBuf, size_t srcLen)
{
unsigned propsSize = LZMA_PROPS_SIZE;
*dstLen = srcLen + srcLen / 3 + 128;
*outBuf = (unsigned char*)malloc(propsSize + *dstLen);
int res = LzmaCompress(
(unsigned char*)(*outBuf + LZMA_PROPS_SIZE), dstLen,
inBuf, srcLen,
*outBuf, &propsSize,
-1, 0, -1, -1, -1, -1, -1);
assert(res == SZ_OK);
*dstLen = *dstLen + LZMA_PROPS_SIZE; …Run Code Online (Sandbox Code Playgroud) 在使用python 3.7.3的Ubuntu 18.04上,我尝试导入熊猫,但这失败了,因为它找不到_lzma。
我已验证_lzmadpkg已安装:
/usr/lib/python3.7/lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so。奇怪的是,_lzma不是熊猫的依赖项(如pip3所指定)。
我有一堆用LZMA压缩的SWF文件,我想在我的服务器上以编程方式解压缩和读取PHP.有人可以指导我使用PHP LZMA SDK吗?我已经用Google搜索了,但到目前为止还没有发现任何东西,只是引用了一个断开的链接(7z扩展为php?)
我有一个工作的python模块,设法读取LZMA压缩SWF的标头,但它需要一个名为pyLZMA的模块,它似乎不想在我的服务器上安装,并让它在本地工作是一个巨大的痛苦,所以我如果有的话,我更喜欢PHP解决方案.
我正在从源安装 R 3.3.1。在./configure --enable-R-shlib执行过程中,弹出错误:
checking for lzma_version_number in -llzma... yes
checking lzma.h usability... yes
checking lzma.h presence... yes
checking for lzma.h... yes
checking if lzma version >= 5.0.3... no
configure: error: "liblzma library and headers are required"
Run Code Online (Sandbox Code Playgroud)
我看到没有可用的 LZMA 版本 5.0.3,目前可通过XZ Utils.
我安装了,XZ 5.2.2但错误仍然出现。
我试图使用 python 解压缩 7z 文件,但我似乎无法弄清楚。我想我可以在 python 3 中使用 lzma 模块,但我似乎无法弄清楚:
我认为它会像 zipfile 包一样工作:
import lzma
with lzma.open('data.7z') as f:
f.extractall(r"<output path>")
Run Code Online (Sandbox Code Playgroud)
但在阅读文件后,似乎没有。所以这是我的问题:如何使用标准包提取 7z 文件?我不想调用 subprocess 来使用 7-zip 解压缩文件,因为我不能保证用户安装了这个软件。
我搜索了互联网和堆栈 oerflow 并注意到所有答案几乎都回到使用子处理上,我想像瘟疫一样避免这种情况。
虽然在 stackoverflow 上也有类似的问题,但答案仍然取决于 7-zip 或 7zip SDK。我不想使用 7-zip sdk/exe 进行提取,因为这假设用户已安装该软件。
这是 7z 文件中的属性:
TLDR;的python中提供的各种压缩算法 gzip,bz2,lzma,等,具有最佳的减压性能?
完整讨论:
Python 3 有各种用于压缩/解压缩数据的模块,
包括gzip、bz2和lzma。gzip并且bz2还可以设置不同的压缩级别。
如果我的目标是平衡文件大小(/压缩比)和解压缩速度(压缩速度不是问题),哪个是最佳选择?解压缩速度比文件大小更重要,但由于有问题的未压缩文件每个大约 600-800MB(32 位 RGB .png 图像文件),而且我有十几个,我确实想要一些压缩。
我的用例是我从磁盘加载一打图像,对它们进行一些处理(作为一个 numpy 数组),然后在我的程序中使用处理过的数组数据。
pickle)而不是每次加载原始的、未处理的图像来节省一些加载时间。最初的测试很有希望——加载原始/未压缩的腌制数据只需要不到一秒钟,而加载和处理原始图像则需要 3 或 4 秒——但如前所述导致文件大小约为 600-800MB,而原始 png 图像是只有大约 5MB。所以我希望通过以压缩格式存储选择的数据,我可以在加载时间和文件大小之间取得平衡。更新:情况实际上比我上面描述的要复杂一些。我的应用程序使用PySide2,所以我可以访问这些Qt库。
pillow( PIL.Image)转换为 numpy 数组,实际上我不需要做任何处理,但将图像读入数组的总时间约为 4 秒。QImage读取图像,那么我必须对结果进行一些处理,以使其可用于我的程序的其余部分,因为QImage加载数据的方式的字节序- 基本上我必须交换位顺序和然后旋转每个“像素”,使 alpha 通道(显然是由 QImage 添加的)出现在最后而不是第一个。这整个过程只需约3.8秒,所以稍微比只使用PIL更快。numpy未压缩的数组,那么我可以在 0.8 …lzma ×10
compression ×4
7zip ×2
gzip ×2
javascript ×2
python ×2
bz2 ×1
c ×1
c++ ×1
java ×1
pandas ×1
performance ×1
php ×1
python-3.7 ×1
python-3.x ×1
r ×1
redhat ×1
ubuntu-18.04 ×1
xz ×1