Я сжал файл в терминале с помощью compress file.txt
и получил (как и ожидалось) file.txt.Z
Когда я передаю этот файл ioutil.ReadFile
в Go,
buf0, err := ioutil.ReadFile("file.txt.Z")
Я получаю сообщение об ошибке (строка выше 116):
finder_test.go:116: lzw: invalid code
Я обнаружил, что Go примет файл, если я сожму его с помощью пакета compress/lzw
, я просто использовал код из веб-сайт, который это делает. Я только изменил строку
outputFile, err := os.Create("file.txt.lzw")
Я изменил .lzw
на .Z
. затем использовал полученный file.txt.Z
в коде Go вверху, и он работал нормально, без ошибок.
Примечание. file.txt
составляет 16,0 КБ, file.txt.Z
в unix-сжатии — 7,8 КБ, а file.txt.Z
в сжатом виде — 8,2 КБ.
Теперь я пытался понять, почему это произошло. Итак, я попытался запустить
uncompress.real file.txt.Z
и это не сработало. я получил
file.txt.Z: not in compressed format
Мне нужно использовать компрессор (предпочтительно unix-compress
) для сжатия файлов с помощью lzw-compression
, а затем использовать те же сжатые файлы на двух разных алгоритмах, один написан на C, а другой на Go, потому что я намерен сравнить производительность двух алгоритмов. Программа C
будет принимать только файлы, сжатые с помощью unix-compress
, а программа Go будет принимать только файлы, сжатые с помощью compress/lzw
Go.
Кто-нибудь может объяснить, почему это произошло? Почему два файла .Z не эквивалентны? Как я могу преодолеть это?
Примечание. Я работаю над Ubuntu, установленной в VirtualBox на Mac.