标签: deflate

.NET DeflateStream用法

我试图在.NET中使用INFLATE压缩流DeflateStream.InvalidDataException虽然我知道我传递的数据已经被DEFLATE算法正确处理(它已经过测试),但是我的代码抛出了一个.我使用DeflateStream不正确吗?我的代码如下:

public byte[] Inflate(byte[] deflateArr)
    {
        MemoryStream ms;

        // try to create a MemoryStream from a byte array
        try
        {
            ms = new MemoryStream(deflateArr);
        }
        catch (ArgumentNullException)
        {
            return null;
        }

        // create a deflatestream and pass it the memory stream
        DeflateStream ds;
        try
        {
            ds = new DeflateStream(ms, CompressionMode.Decompress);
        }
        catch (ArgumentNullException)
        {
            return null;
        }
        catch (ArgumentException)
        {
            return null;
        }

        // create a bytes array and read into it
        byte[] bytes …
Run Code Online (Sandbox Code Playgroud)

.net deflate deflatestream inflate

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

添加Interval时,HttpWebRequest会变慢

测试下载网页源的不同可能性我得到了以下结果(google.com,9gag.com的平均时间毫秒):

  • 普通的HttpWebRequest:169,360
  • Gzip已HttpWebRequest的:143,260
  • Web客户端GetStream:132,295
  • WebClient DownloadString:143,389

所以对于我的9gag客户端,我决定采用gzip HttpWebRequest.问题是,在我的实际程序中实现后,请求所需的时间超过两倍.
只在两个请求之间添加Thread.Sleep时也会出现问题.

编辑:
只是改进了一点代码,仍然是同样的问题:当在循环中运行时,当我在请求之间添加延迟时,请求需要更长的时间

for(int i = 0; i < 100; i++)
{
    getWebsite("http://9gag.com/");
}
Run Code Online (Sandbox Code Playgroud)

每个请求大约需要250毫秒.

for(int i = 0; i < 100; i++)
{
    getWebsite("http://9gag.com/");
    Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

每个请求大约需要610毫秒.

    private string getWebsite(string Url)
    {
        Stopwatch stopwatch = Stopwatch.StartNew();

        HttpWebRequest http = (HttpWebRequest)WebRequest.Create(Url);
        http.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
        string html = string.Empty;

        using (HttpWebResponse webResponse = (HttpWebResponse)http.GetResponse())
        using (Stream responseStream = webResponse.GetResponseStream())
        using (StreamReader reader = new StreamReader(responseStream))
        {

            html = …
Run Code Online (Sandbox Code Playgroud)

.net c# gzip httpwebrequest deflate

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

以gzip格式包装缩小的数据

我想我错过了很简单的事情.我有一个字节数组,使用Deflater保存写入其中的缩小数据:

deflate(outData, 0, BLOCK_SIZE, SYNC_FLUSH)
Run Code Online (Sandbox Code Playgroud)

我不仅使用GZIPOutputStream的原因是因为有4个线程(变量),每个线程都被赋予一个数据块,每个线程在将压缩数据存储到全局字节数组之前压缩它自己的块.如果我使用GZIPOutputStream它会混淆格式,因为每个小块都有一个标题和预告片,它是自己的gzip数据(我只想压缩它).

所以最后,我得到了这个byteArray,outData,它保存了我所有的压缩数据,但我不确定如何包装它.GZIPOutputStream从具有未压缩数据的缓冲区写入,但此数组全部已设置.它已经被压缩了,我只是试图弄清楚如何将它变成一个表格.

编辑:好的,我的措辞不好.我将它写入输出,而不是文件,以便在需要时可以重定向.一个非常简单的例子是

cat file.txt | java Jzip | gzip -d | cmp file.txt
Run Code Online (Sandbox Code Playgroud)

应该返回0.现在的问题是如果我按原样编写这个字节数组来输出,它只是"原始"压缩数据.我认为gzip需要所有这些额外的信息.

如果有另一种方法,那就没问题了.这样的全部原因是因为我需要使用多个线程.否则我只会调用GZIPOutputStream.

DOUBLE EDIT:由于评论提供了很多好的见解,另一种方法是我只有一堆未压缩的数据块,这些数据块原本是一个长流.如果gzip可以读取连接流,如果我接受了这些块(并按顺序保存它们)并将每个块分配给一个在自己的块上调用GZIPOutputStream的线程,然后取结果并连接它们.实质上,每个块现在都有标题,压缩信息和预告片.如果我连接它们,gzip会认识到吗?

例:

cat file.txt
Hello world! How are you? I'm ready to set fire to this assignment.

java Testcase < file.txt > file.txt.gz
Run Code Online (Sandbox Code Playgroud)

所以我从输入中接受它.在程序内部,流被分成"Hello world!"."你好吗?" "我准备放火烧这个任务"(它们不是字符串,它只是一个字节数组!这只是插图)

所以我有三个字节块,都是未压缩的.我将每个块都给了一个使用的线程

public static class DGZIPOutputStream extends GZIPOutputStream
{
    public DGZIPOutputStream(OutputStream out, boolean flush) throws IOException
    {
        super(out, flush);
    }
    public void setDictionary(byte[] b)
    {
        def.setDictionary(b);
    }
    public void updateCRC(byte[] input)
    {
        crc.update(input); …
Run Code Online (Sandbox Code Playgroud)

java multithreading gzip concatenation deflate

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

"java.util.zip.DataFormatException:不正确的标题检查"在JavaScript中缩小然后在Java中膨胀

我在页面中有一个大数据,需要发布到服务器.

所以我使用https://github.com/dankogai/js-deflate来缩小大数据.

看来工作正常.

helloworld - > w4tIw43DicOJL8OPL8OKSQEA

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<body>
<h1>Demo</h1>
<p>$Id: demo.html,v 0.4 2013/04/09 14:25:38 dankogai Exp dankogai $</p>
<dl>
<dt>Inflated + Base64-Decoded (Original):</dt>
<dd><textarea id="inflated" cols="64" rows="16" onkeyup="(function(that, dst){
  setTimeout(function(){
    dst.value = Base64.toBase64(RawDeflate.deflate(Base64.utob(that.value)));
  },0)
})(this,$('deflated'))"></textarea></dd>
<dt>Deflated + Base64-Encoded (Compressed):</dt>
<dd><textarea id="deflated" cols="64" rows="16" onkeyup="(function(that, dst){
  setTimeout(function(){
    dst.value = Base64.btou(RawDeflate.inflate(Base64.fromBase64(that.value)));
  },0);
})(this, $('inflated'))"></textarea></dd>
</dl>
<script src="./base64.js"></script>
<script src="../rawinflate.js"></script>
<script src="../rawdeflate.js"></script>
<script>
$ = function(id){ return document.getElementById(id) };
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所以我希望通过将deflate的结果放入我得到错误的java代码来得到hellowold: …

javascript java base64 deflate inflate

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

okhttp 3:如何使用Java / Android手动解压缩gzip / deflate响应

我知道okhttp3默认情况下,该库会添加标头Accept-Encoding: gzip并自动为我们解码响应。

我要处理的主机仅接受标头的问题是:Accept-Encoding: gzip, deflate如果不添加deflate部分,它将失败。现在,当我手动将该标头添加到okhttp客户端时,该库不再对我进行解压缩。

我已经尝试了多种解决方案来获取响应并尝试手动解压缩该响应,但是我总是最终遇到一个异常,即java.util.zip.ZipException: Not in GZIP format,这是我到目前为止已经尝试的方法:

//decompresser
public static String decompressGZIP(InputStream inputStream) throws IOException
{
    InputStream bodyStream = new GZIPInputStream(inputStream);
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[4096];
    int length;
    while ((length = bodyStream.read(buffer)) > 0) 
    {
        outStream.write(buffer, 0, length);
    }

    return new String(outStream.toByteArray());
}


//run scraper
scrape(api, new Callback()
{
    // Something went wrong
    @Override
    public void onFailure(@NonNull Call call, @NonNull IOException e) …
Run Code Online (Sandbox Code Playgroud)

java android gzip deflate okhttp3

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

如何从头开始完全实现PNG解码器

为了学习目的,我开始研究 PNG 编码/解码库,所以我想手动实现它的每个部分。

我已经花了很长时间了,但现在我有点卡住了。以下是我已经成功实施的事情:

  • 我可以加载 PNG 二进制文件并浏览它的字节
  • 我可以读取元数据的签名和 IHDR 块
  • 我可以读取 IDAT 块并将图像数据连接到缓冲区中
  • 我可以从上述图像数据中读取并解释 zlib 标头

这就是我陷入困境的地方。我隐约知道这里的步骤是:

  • 根据头提取 zlib 压缩数据
  • 找出所使用的过滤方法并“撤消”它们以获取原始数据
  • 如果一切顺利,现在我拥有以下形式的原始 RGB 数据[<R of 1st pixel>, <G of 1st pixel>, <B of 1st pixel>, <R of 2nd pixel>, <G of 2nd pixel>, etc...]

我的问题是:

  • 是否有任何易于理解的实现(也许带有示例)或关于 zlib 提取的指南,因为我发现官方规范很难理解
  • 同一个文件中可以使用多种过滤方法吗?如何弄清楚这些?如何弄清楚这些不同过滤部分的“边界”?
  • 我对最终数据的理解是否正确?Alpha 通道或使用调色板时怎么样?

algorithm png zlib image-processing deflate

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

如何找到 DEFLATE 块的结尾

出于自学目的,我正在尝试创建一个程序,将 png 文件转换为 RGBA 值数组。但是,我在解码使用 deflate 格式使用 zlib 编码的 IDAT 部分时遇到问题。我遇到的问题是我不知道如何找到压缩块的结尾。文档中显示长度的唯一地方仅用于解压缩块,但是对于具有默认霍夫曼表的块和在那里提供的霍夫曼表似乎没有办法找出块在哪里结束。我应该如何找到 deflate 格式的块的结尾。

c++ zlib deflate

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

Java达到> 50%的压缩率

我正在尝试压缩pdf文件(有时是图像).我需要一个java压缩器,它将帮助我压缩我的文件.我需要的大小不到原始文档大小的一半.我试过在java apis中给出的deflator.但它并不是很成功.请帮帮我.

java compression deflate

0
推荐指数
1
解决办法
776
查看次数

Rack :: Deflater和gzip in rails app

我添加use Rack::Deflater到config.ru试图提供gzip压缩css和js.

但是当我加载页面时,我仍然看到css和js服务而不是css.gz

我应该看看css.gz还是js.gz?还是我错过了什么

gzip rack deflate ruby-on-rails-3

0
推荐指数
1
解决办法
1295
查看次数

缩小差异?

所以我试图创建一个 python 脚本来为 MMF2+Lua 制作的游戏生成一个关卡,但我遇到了一些我不知道如何修复的问题。
生成一个带有游戏边框的 16x16 空关卡会给出以下结果(缩小):
78 5E 63 20 0A FC 27 00 40 86 8C AA C1 1D 02 23 3D 7C 08 27 32 00 9F 62 FE 10
它应该是一个扁平的 18x18 数组,其边缘具有0x00,其余部分具有0xFF
我的 python 脚本使用完全相同的输入生成此数据zlib.deflate
78 9C 63 60 20 06 FC 27 00 46 D5 8C AA C1 A7 86 30 00 00 9F 62 FE 10
它们是不同的,但膨胀它们会给出相同的数据。但是,当我将数据放入游戏时,尝试加载关卡时它崩溃了。
这两个值之间到底有什么不同,我可以修复它吗?

python lua zlib deflate

0
推荐指数
1
解决办法
102
查看次数

JWS 登录 java 和 typescript 不会产生相同的结果

我正在尝试使用 Deflater.class 对 Java 中的 JSON 字符串进行原始压缩。但是java和typescript生成的压缩结果有一些区别。

let bodyString = JSON.stringify(idTokenPayload);
const fields = deflate ? { zip: 'DEF' } : {};
const body = deflate ? pako.deflateRaw(bodyString) : bodyString;
Run Code Online (Sandbox Code Playgroud)

在爪哇,

protected String deflateAndBase64Encode(String jsonString) {
        try {

            ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
            Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION, true);
            DeflaterOutputStream deflaterStream = new DeflaterOutputStream(bytesOut, deflater);
            deflaterStream.write(jsonString.getBytes());
            deflaterStream.finish();
            
            return Base64.getEncoder().encodeToString(bytesOut.toByteArray());
        } catch (IOException e) {
        }
        return "";
    }
Run Code Online (Sandbox Code Playgroud)

更新:

我需要按如下方式转换 JSON 有效负载以生成智能健康卡。Json Payload -> Minified JSON -> Raw deflate -> …

java deflate typescript pako raw

0
推荐指数
1
解决办法
122
查看次数

解析 zlib 头文件

我花了几天时间阅读 zlib(以及 gzip 和 deflate)RFC,我可以说它们有点垃圾。缺少一些细节,所以我打开这个问题。

我正在尝试解析 zlib 数据,我需要了解有关标头的一些详细信息。

首先,RFC 说会有 2 个字节,CMF并且FLG.

CMF分为 2 个 4 位部分。第一个是CM,第二个是CINFO

的可能值是CM什么?RFC 说这8意味着deflate并且那15是保留的,但是其余的可能值呢?

CINFO 另一方面,如果我正确理解 RFC,应该总是 8(如果我错了,请纠正我)。

跳过FLG和可能的FDICT,我们进入该Compressed data部分。RFC的这一部分说:

For compression method 8, the compressed data is stored in the
deflate compressed data format as described in the document
"DEFLATE Compressed Data Format Specification" by L. Peter
Deutsch. (See reference [3] …
Run Code Online (Sandbox Code Playgroud)

parsing gzip zlib deflate

-1
推荐指数
1
解决办法
1556
查看次数