flexzlib/inflator.go (28 lines of code) (raw):

package flexzlib import ( "bytes" "io/ioutil" ) type Inflator struct { r *Reader } func NewInflator() *Inflator { return &Inflator{} } func (i *Inflator) Inflate(p []byte) ([]byte, error) { buf := bytes.NewBuffer(p) if i.r == nil { // Need to do this lazily since we need to make sure // we have a complete zlib header. r, err := NewReader(buf) if err != nil { return nil, err } i.r = r } else { i.r.SwapReader(buf) } r, e := ioutil.ReadAll(i.r) return r, e } func (i *Inflator) Read(p []byte) (int, error) { return i.r.Read(p) }