gpt4 book ai didi

go - 为什么使用 unix-compress 和 go compress/lzw 会产生不同的文件,而其他解码器无法读取?

转载 作者:IT王子 更新时间:2023-10-29 02:12:19 29 4
gpt4 key购买 nike

我在终端中使用 compress file.txt 压缩了一个文件并得到了(如预期的那样)file.txt.Z

当我将该文件传递给 Go 中的 ioutil.ReadFile 时,

buf0, err := ioutil.ReadFile("file.txt.Z")

我收到错误(上面的行是 116):

finder_test.go:116: lzw: invalid code

我发现如果我使用 compress/lzw 包压缩它,Go 会接受该文件,我只是使用了 a website 中的代码那样做。我只修改了行

outputFile, err := os.Create("file.txt.lzw")

我将 .lzw 更改为 .Z。然后在顶部的 Go 代码中使用生成的 file.txt.Z,它运行良好,没有错误。

注意:file.txt为16.0kB,unix压缩的file.txt.Z为7.8kB,go压缩的file.txt.Z 是 8.2 kB

现在,我试图理解为什么会这样。所以,我试着跑

uncompress.real file.txt.Z

但它没有用。我得到了

file.txt.Z: not in compressed format

我需要使用压缩器(最好是 unix-compress)来使用 lzw-compression 压缩文件,然后在两种不同的算法上使用相同的压缩文件,一种是用C和Go中的另一个,因为我打算比较两种算法的性能。 C 程序只接受用 unix-compress 压缩的文件,Go 程序只接受用 Go 的 compress/lzw 压缩的文件。

有人可以解释为什么会这样吗?为什么这两个 .Z 文件不相同?我该如何克服这个问题?

注意:我正在使用 Mac 上安装在 VirtualBox 中的 Ubuntu。

最佳答案

.Z 文件不仅包含 LZW 压缩数据,还有 a 3-bytes header Go LZW 代码不会生成,因为它旨在压缩数据,而不是生成 Z 文件。

关于go - 为什么使用 unix-compress 和 go compress/lzw 会产生不同的文件,而其他解码器无法读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889664/

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