标签: compression

压缩格式对档案内的随机访问有很好的支持?

这与之前的问题类似,但那里的答案不能满足我的需求,我的问题略有不同:

我目前对一些包含排序数据的非常大的文件使用gzip压缩.当文件未被压缩时,二进制搜索是支持在排序数据中寻找位置的便捷有效方式.

但是当文件被压缩时,事情变得棘手.我最近发现了zlibZ_FULL_FLUSH选项,可以在压缩过程中使用它在压缩输出中插入"同步点"(inflateSync()然后可以从文件中的各个点开始读取).这是可以的,虽然我已经拥有的文件必须重新压缩才能添加此功能(奇怪的gzip是没有这个选项,但如果必须,我愿意编写自己的压缩程序).

一个来源看来,即使Z_FULL_FLUSH不是一个完美的解决方案......不仅所有gzip档案都不支持它,而且在档案中检测同步点的想法可能会产生误报(或者与同步的幻数重合)点,或由于Z_SYNC_FLUSH也产生同步点但它们不能用于随机访问的事实.

有更好的解决方案吗?如果可能的话,我想避免使用辅助文件进行索引,并且对准随机访问的显式默认支持将是有帮助的(即使它是大粒度的 - 就像能够以每10 MB的间隔开始读取一样).是否有另一种压缩格式比gzip更好地支持随机读取?

编辑:正如我所提到的,我希望在压缩数据中进行二进制搜索.我不需要寻找特定的(未压缩的)位置 - 只是在压缩文件中寻找一些粗粒度.我只是希望能够支持诸如"将数据从大约50%(25%,12.5%等)开始压缩到此压缩文件中".

compression gzip zlib archive random-access

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

将zip文件内容解压缩到Python 2.7中的特定目录

这是我目前用于提取与脚本位于同一当前工作目录中的zip文件的代码.如何指定要提取的其他目录?

我试过的代码并没有在我想要的地方提取它.

import zipfile

fh = open('test.zip', 'rb')
z = zipfile.ZipFile(fh)
for name in z.namelist():
    outfile = open(name, 'wb')
    outfile.write('C:\\'+z.read(name))
    outfile.close()
fh.close()
Run Code Online (Sandbox Code Playgroud)

python windows compression

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

Python:Inflate和Deflate实现

我正在与服务器连接,该服务器要求发送给它的数据使用Deflate算法(Huffman编码+ LZ77)进行压缩,并且还发送我需要的数据以进行Inflate.

我知道Python包含Zlib,并且Zlib中的C库支持对InflateDeflate的调用,但这些显然不是由Python Zlib模块提供的.它提供压缩解压,但是当我拨打电话,如下列:

result_data = zlib.decompress( base64_decoded_compressed_string )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error -3 while decompressing data: incorrect header check
Run Code Online (Sandbox Code Playgroud)

Gzip并没有更好; 在打电话时如:

result_data = gzip.GzipFile( fileobj = StringIO.StringIO( base64_decoded_compressed_string ) ).read()
Run Code Online (Sandbox Code Playgroud)

我收到错误:

IOError: Not a gzipped file
Run Code Online (Sandbox Code Playgroud)

这是有道理的数据是平减文件不是真正的Gzip压缩文件.

现在我知道有一个Deflate实现可用(Pyflate),但我不知道Inflate的实现.

似乎有几个选择:

  1. 在Python中查找InflateDeflate的现有实现(理想)
  2. 将我自己的Python扩展编写到包含InflateDeflate的zlib c库中
  3. 调用可以从命令行执行的其他内容(例如Ruby脚本,因为zlib中的Inflate/Deflate调用完全包含在Ruby中)

我正在寻求解决方案,但缺乏解决方案,我将感谢见解,建设性意见和想法.

附加信息:为了我需要的目的,放松(和编码)字符串的结果应该与下面的C#代码片段给出相同的结果,其中输入参数是与要压缩的数据相对应的UTF字节数组:

public static …
Run Code Online (Sandbox Code Playgroud)

c# python compression zlib

52
推荐指数
2
解决办法
4万
查看次数

压缩文件多少次?

我正在考虑压缩,似乎必须对可以应用于它的压缩进行某种限制,否则它将是单个字节.

所以我的问题是,我之前可以压缩文件多少次:

  • 它没有变小?
  • 文件变坏了?

这两点是相同还是不同?

收益递减点在哪里出现?

如何找到这些要点?

我不是在谈论任何特定的算法或特定文件.

compression limits

52
推荐指数
5
解决办法
7万
查看次数

GZipStream还是DeflateStream类?

MSDN文档告诉我以下内容:

GZipStream类使用gzip数据格式,该格式包括用于检测数据损坏的循环冗余校验值.gzip数据格式使用与DeflateStream类相同的压缩算法.

似乎GZipStream在输出中添加了一些额外的数据(相对于DeflateStream).我想知道,在什么类型的场景中使用GZipStream而不是DeflateStream是必不可少的?

.net c# compression

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

如何使用PHP创建.gz文件?

我想使用PHP在我的服务器上压缩文件.有没有人有一个输入文件并输出压缩文件的例子?

php compression gzip

52
推荐指数
4
解决办法
5万
查看次数

压缩/解压缩文件夹和文件

有谁知道在C#中快速压缩或解压缩文件和文件夹的好方法?可能需要处理大文件.

.net c# compression file

51
推荐指数
8
解决办法
3350
查看次数

使用Nvidia的CUDA的压缩库

有没有人知道一个使用NVIDIA的CUDA库实现标准压缩方法(如Zip,GZip,BZip2,LZMA ......)的项目?

我想知道是否能够利用大量并行任务(如压缩)的算法在显卡上的运行速度要比使用双核或四核CPU快得多.

您如何看待这种方法的优缺点?

compression cuda gpgpu

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

我怎样才能保护自己免受拉链炸弹袭击?

我刚看过拉链炸弹,即包含大量高度可压缩数据(00000000000000000 ...)的zip文件.

打开时,它们会填满服务器的磁盘.

解压缩之前,如何检测zip文件是拉链炸弹?

更新你能告诉我在Python或Java中是如何完成的?

python java compression security zip

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

如何在Java中压缩String?

我使用GZIPOutputStreamZIPOutputStream压缩一个String(我string.length()的小于20),但压缩结果比原始字符串长.

在某些网站上,我发现有些朋友说这是因为我原来的字符串太短,GZIPOutputStream可以用来压缩更长的字符串.

那么,有人可以给我一个压缩字符串的帮助吗?

我的功能如下:

String compress(String original) throws Exception {

}
Run Code Online (Sandbox Code Playgroud)

更新:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import java.util.zip.*;


//ZipUtil 
public class ZipUtil {
    public static String compress(String str) {
        if (str == null || str.length() == 0) {
            return str;
        }

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(out);
        gzip.write(str.getBytes());
        gzip.close();
        return out.toString("ISO-8859-1");
    }

    public static void main(String[] args) throws IOException {
        String string = "admin";
        System.out.println("after compress:"); …
Run Code Online (Sandbox Code Playgroud)

java compression string zip

51
推荐指数
4
解决办法
11万
查看次数

标签 统计

compression ×10

c# ×3

python ×3

.net ×2

gzip ×2

java ×2

zip ×2

zlib ×2

archive ×1

cuda ×1

file ×1

gpgpu ×1

limits ×1

php ×1

random-access ×1

security ×1

string ×1

windows ×1