2014-04-21 1 views
0

Я пытаюсь создать сжатую строку бассейн с Go. Это мой код - http://play.golang.org/p/T5usLfU0fAGolang: не может распаковывать данные с LZW пакет

Я не могу распаковать, что бы бен сжатый с пакетом компресс/LZW. Вход в lzw.Writer равен [104 101 108 108 111 32 119 111 114 108 100], а выход lzw.Reader равен [0 1 0 0 3 0 3 3 2 0 0]. Они определенно не совпадают.

Я создаю читатель и писатель с теми же параметрами (все, кроме буфера). Буфер для lzw.Reader содержит данные, ранее сжатые с помощью lzw.Writer.

ответ

5

Изменение параметра litWidth для lzw.NewReader и lzw.NewWriter от 2 до 8.

Я не много знаю о LZW, но это выглядит как litWidth определяет, сколько битов из каждого входящего байта считаются значимыми. Таким образом, значение 2 означает, что все входные байты должны быть 0x00 - 0x03.

См http://play.golang.org/p/svjeVFntuE для минимального примера LZW редиректа. A litWidth из 7 работ (но, по-видимому, небезопасен для текста UTF-8), все, что меньше 7, терпит неудачу.

+0

, а также в ReadAt функция, изменение 'любитель: = bytes.NewBuffer (биты)' в 'г: = bytes.NewReader (биты)', так как первый один создает новый буфер, инициализированный для 'bits' так что вы может писать дополнительные вещи. Вы не нуждаетесь в этой памяти. – Kluyg

+0

Спасибо, это работает отлично. Кстати, я переписываю все, используя пакет go-smaz - https://github.com/Lazin/go-ngram/blob/master/spool.go, потому что большинство моих строк мало. – Lazin

 Смежные вопросы

  • Нет связанных вопросов^_^