7-zip Deflate 和 zlib.compress() 有什么区别?

问题描述 投票:0回答:1

大家好

我试图理解

Deflate
压缩,但从我所看到的来看,我认为我误解了或做错了什么。 所以我获取了
7zip
的源代码,这样我可能会理解发生了什么,但源代码很难阅读,而且我找不到负责
Deflate
压缩的函数 但这是困扰我的事情。

我有 2 个文本文件。

Test1.txt 有:

大家好 我试图理解 Deflate 压缩,但从我所看到的情况来看,我认为我误解了或做错了什么。 所以我获取了 7zip 的源代码,这样我可能会明白发生了什么,但源代码很难阅读,而且我找不到负责 Deflate 压缩的函数 但这就是困扰我的事情。

Test2.txt 有:

大家好 我试图理解 Deflate 压缩,但从我所看到的情况来看,我认为我误解了或做错了什么。 所以我获取了 7zip 的源代码

如果我使用

zlib.compress()

import zlib

def deflate_file(input_filename, output_filename):
    with open(input_filename, 'rb') as input_file:
        data = input_file.read()

    compressed_data = zlib.compress(data, zlib.Z_BEST_COMPRESSION)

    with open(output_filename, 'wb') as output_file:
        output_file.write(compressed_data)

input_file = 'test1.txt'
output_file = 'compressed.deflate'
deflate_file(input_file, output_file)

我明白了

78 DA 6D 50 BD 6E 03 21 0C DE 4F BA 77 F0 96 2D 6B 5F A0 43 3B F7 09 E0 F0 81 D5 C3 46 06 12 25 4F 5F 3B 69 A5 56 EA 06 F6 F7 EB 37 3C 04 F0 82 7A 13 C6 75 59 97 77 08 15 86 DE 88 33 0C 81 C9 09 B5 8F C0 09 5E 71 3F C2 40 D8 A4 36 C5 DE 49 18 E2 1C B0 AB 54 B8 96 30 80 A0 84 0B 42 47 64 7B 8F 42 FC F9 33 AB D4 BF A5 44 12 88 42 32 3F E8 52 D1 61 19 AE 2A 9C CF EB F2 21 C6 C8 1A 62 C4 04 C1 00 53 37 B7 4C 08 BB B1 5E EE D4 6C 68 98 4A B9 8C DF F1 9E 09 BA D9 B5 86 EC 9A 1E 6E 14 FC 23 F2 00 68 F2 6A 8A C1 2C 8C 49 B6 9A 47 E2 93 75 21 FB 3B 67 9F BC 0D 6F 68 4D 9B 70 A7 78 3C 13 FC 73 85 75 71 A7 82 FA 90 F7 1C A7 6E 27 94 19 0F 8F 51 F1 FC 05 8F 38 80 56

但是用 7zip 压缩文件我得到

50 4B 03 04 14 00 00 00 08 00 72 8C 4C 58 BF BE E6 4C D7 00 00 00 66 01 00 00 09 00 00 00 74 65 73 74 31 2E 74 78 74 6D 50 3B 52 03 31 0C ED 77 66 EF A0 2E 5D 5A 2E 40 01 35 27 F0 AE B5 B6 07 5B F2 C8 72 32 E1 F4 48 09 0C 14 E9 6C E9 7D F5 86 95 01 2F 28 37 26 5C 97 75 79 87 D0 40 E5 56 28 81 32 4C 8A 28 43 03 45 78 C5 A3 06 45 D8 B9 75 C1 31 0A 13 6C 53 E1 10 6E 70 CD 41 A1 40 0E 17 84 81 48 F6 D6 5C E8 F3 77 D6 CA F8 91 62 8E C0 02 D1 FC 60 70 43 87 25 B8 0A 53 3A AF CB 07 1B 23 49 D8 36 8C 10 0C 30 65 77 CB 88 70 18 EB E5 AB 74 1B 1A A6 95 94 F5 7F BC 47 82 61 76 BD 23 B9 A6 87 D3 EC 2E 7F 22 77 80 44 AF 26 18 CC C2 98 C5 56 B3 46 3A 59 97 62 7F E7 1C 93 76 F5 86 D6 B4 33 8D B2 D5 47 82 27 57 58 17 77 CA 28 77 79 CF 71 1A 76 42 9E 5B F5 18 0D CF DF 50 4B 01 02 3F 00 14 00 00 00 08 00 72 8C 4C 58 BF BE E6 4C D7 00 00 00 66 01 00 00 09 00 24 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 74 65 73 74 31 2E 74 78 74 0A 00 20 00 00 00 00 00 01 00 18 00 2F 80 43 1F C9 5D DA 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 50 4B 05 06 00 00 00 00 01 00 01 00 5B 00 00 00 FE 00 00 00 00 00

问题。

zlib.compress()
7zip的deflate有什么区别?

如何从 zlib 获得与 7zip 相同的输出?

为什么 7zip 的 Deflate 对 test1.txt 和 test2.txt 的输出与输入具有不同的最高有效位?

如果可能的话,我想在我的7zip源代码中添加一个功能来保存压缩的数据以供分析。

zlib 7zip deflate lossless-compression
1个回答
0
投票

您正在压缩为两种不同的格式。

78 da
是 zlib 流的开始。
50 4B
是 zip 文件的开头。请参阅https://stackoverflow.com/a/20765054/1180620

我不相信 7zip 有生成 zlib 流的选项。

© www.soinside.com 2019 - 2024. All rights reserved.