gpt4 book ai didi

java - inflater 不会解压缩所有压缩字节

转载 作者:行者123 更新时间:2023-12-01 10:15:56 25 4
gpt4 key购买 nike

Deflater 压缩由 0 到 99 字节组成的字节数组(长度为 100)压缩后的字节数组被传递给 Inflater 作为解压缩的输入。解压缩器返回的长度比原始列表缺少 3 个字节。

以下是代码:

        byte orig[] = new byte[100];
IntStream.range(0, 100).forEach(i -> orig[i] = (byte) i);


System.out.println("OrigLength: " + orig.length);

byte[] compressed = new byte[orig.length];


Deflater deflater = new Deflater();
deflater.setInput(orig);
deflater.finish();
int compressedLength = deflater.deflate(compressed);
deflater.end();
System.out.println("--------------------------------------------------------------------");
System.out.println("CompressedLength::" + compressedLength);
for (int i = 0; i < compressedLength; i++) {
System.out.print(compressed[i] + " ");
}


Inflater decompresser = new Inflater();
decompresser.setInput(compressed, 0, compressedLength);
byte[] result = new byte[compressedLength];
int resultLength = decompresser.inflate(result);
decompresser.end();

System.out.println("\n--------------------------------------------------------------------");
System.out.println("DecompressedLength::" + resultLength);
for (int i = 0; i < resultLength; i++) {
System.out.print(result[i] + " ");
}

System.out.println("\n--------------------------------------------------------------------");

输出:

OrigLength: 100


CompressedLength::100

120 -100 99 96 100 98 102 97 101 99 -25 -32 -28 -30 -26 -31 -27 -29 23 16 20 18 22 17 21 19 -105 -112 -108 -110 -106 -111 -107 -109 87 80 84 82 86 81 85 83 -41 -48 -44 -46 -42 -47 -43 -45 55 48 52 50 54 49 53 51 -73 -80 -76 -78 -74 -79 -75 -77 119 112 116 114 118 113 117 115 -9 -16 -12 -14 > -10 -15 -11 -13 15 8 12 10 14 9 13 11 -113 -120 -116 -118 -114 -119 -115 -117 79 72


DecompressedLength::97

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96


Process finished with exit code 0

解压后的长度是97,原始长度是100。你能建议一下我的代码有什么问题吗?

谢谢。

最佳答案

虽然不清楚,但我发现了以下内容,

问题不是充气机而是放气机。

Deflater 在压缩数据时,我惊讶地发现字节数比原始未压缩数据增加了。例如,上面的压缩数据数组有 100 个元素,因为数组的大小是 100。

但是,如果我增加压缩数组大小(任意为 200),然后使用该数组,那么 deflate 方法将返回值 108(这里比原始 100 多了 8 个字节)。这让我很困惑,因为要理解我需要知道到底什么是 deflate 压缩以及我正在经历的算法如何工作。

这是更新后的代码,

byte orig[] = new byte[100];

IntStream.range(0, 100).forEach(i -> orig[i] = (byte) i);

System.out.println("OrigLength: " + orig.length);

byte[] compressed = new byte[orig.length * 2]; // double it arbitrarily chosen


Deflater deflater = new Deflater();
deflater.setInput(orig);
deflater.finish();
int compressedLength = 0;
compressedLength = deflater.deflate(compressed);
deflater.end();
System.out.println("--------------------------------------------------------------------");
System.out.println("CompressedLength::" + compressedLength); //now this will be 108
for (int i = 0; i < compressedLength; i++) {
System.out.print(compressed[i] + " ");
}


Inflater decompresser = new Inflater();
byte[] result = new byte[orig.length];
decompresser.setInput(compressed, 0, compressedLength);
int resultLength = decompresser.inflate(result);
decompresser.end();

System.out.println("\n--------------------------------------------------------------------");
System.out.println("DecompressedLength::" + resultLength);
for (int i = 0; i < resultLength; i++) {
System.out.print(result[i] + " ");
}

System.out.println("\n--------------------------------------------------------------------");

输出:

原始长度:100

<小时/>

CompressedLength::108//这是关注点,多了8个字节

120 -100 99 96 100 98 102 97 101 99 -25 -32 -28 -30 -26 -31 -27 -29 23 16 20 18 22 17 21 19 -105 -112 -108 -110 -106 -111 -107 -109 87 80 84 82 86 81 85 83 -41 -48 -44 -46 -42 -47 -43 -45 55 48 52 50 54 49 53 51 -73 -80 -76 -78 -74 -79 -75 -77 119 112 116 114 118 113 117 115 -9 -16 -12 -14 -10 -15 -11 -13 15 8 12 10 14 9 13 11 -113 -120 -116 -118 -114 -119 -115 -117 79 72 76 74 6 0 -117 124 19 87

解压长度::100

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8 7 88 89 90 91 92 93 94 95 96 97 98 99

关于java - inflater 不会解压缩所有压缩字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35890025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com