我在终端中压缩了文件compress file.txt并得到了(如预期的那样)file.txt.Z
compress file.txt
file.txt.Z
当我将该文件传递到ioutil.ReadFileGo中时,
ioutil.ReadFile
buf0, err := ioutil.ReadFile("file.txt.Z")
我收到错误消息(上面的行是116):
finder_test.go:116: lzw: invalid code
我发现,如果我使用compress/lzw软件包压缩文件,Go将接受该文件,而我只是使用了这样做的网站上的代码。我只修改了那条线
compress/lzw
outputFile, err := os.Create("file.txt.lzw")
我改变了.lzw对.Z。然后将结果使用file.txt.Z在顶部的Go代码中,并且工作正常,没有错误。
.lzw
.Z
注意:file.txt是16.0 kB,unix压缩file.txt.Z是7.8 kB,go压缩file.txt.Z是8.2 kB
file.txt
现在,我试图了解为什么会这样。所以我试着跑
uncompress.real file.txt.Z
它没有用。我有
file.txt.Z: not in compressed format
我需要使用一种压缩器(最好是unix-compress)来压缩文件,lzw- compression然后在两种不同的算法上使用相同的压缩文件,一种是用C编写的,另一种是用Go编写的,因为我打算比较两种算法的性能。该C程序将仅接受unix- compress使用Go’s压缩的文件,而Go程序将仅接受使用Go’s压缩的文件compress/lzw。
unix-compress
lzw- compression
C
unix- compress
有人可以解释为什么会这样吗?为什么两个.Z文件不相等?我该如何克服呢?
注意:我正在Mac上安装在VirtualBox中的Ubuntu上工作。
.Z文件不仅包含LZW压缩数据,而且Go LZW代码也不会生成3字节的标头,因为它是用于压缩数据而不生成Z文件。