Мне нужно реализовать функции gzdeflate / gzinflate в go
(уровень сжатия 9)
<?php $z = gzdeflate($str, 9); ?>
Моя текущая реализация Go выглядит следующим образом:
func gzdeflate(str string) string {
var b bytes.Buffer
w, _ := gzip.NewWriterLevel(&b, 9)
w.Write([]byte(str))
w.Close()
return b.String()
}
func gzinflate(str string) string {
b := bytes.NewReader([]byte(str))
r, _ := gzip.NewReader(b)
bb2 := new(bytes.Buffer)
_, _ = io.Copy(bb2, r)
r.Close()
byts := bb2.Bytes()
return string(byts)
}
Я получаю разные результаты
Тест не является ли результат сжатия идентичным или нет. Проверка состоит в том, приводит ли сжатие с последующей декомпрессией к тому же результату, с которого вы начали, независимо от того, где и как реализован компрессор или декомпрессор. Например. Вы должны быть в состоянии передать сжатые данные из Go в PHP или наоборот, и распаковка там точно даст исходный ввод.
Других решений пока нет …