Reset zlib reader instead of re-opening it before reading meta data from block. Speeds up decoding of blocks significantly. Using a sync.Pool will seed it up even more.

This commit is contained in:
Sascha L. Teichmann 2015-08-08 13:00:12 +02:00
parent 076ca9fad6
commit ab1a86384b
1 changed files with 3 additions and 5 deletions

View File

@ -86,12 +86,12 @@ func NewDecodedBlock(data []byte, colors *Colors) (db *DecodedBlock, err error)
if zr, err = zlib.NewReader(&buf); err != nil {
return
}
defer zr.Close()
mapContent := make([]byte, uncompressedLen)
var k int
k, err = io.ReadFull(zr, mapContent)
zr.Close()
if err != nil {
return
}
@ -105,14 +105,12 @@ func NewDecodedBlock(data []byte, colors *Colors) (db *DecodedBlock, err error)
buf.Pos = 0
buf.Data = data[offset:]
if zr, err = zlib.NewReader(&buf); err != nil {
if err = zr.(zlib.Resetter).Reset(&buf, nil); err != nil {
return
}
// Discard the meta data.
_, err = io.Copy(ioutil.Discard, zr)
zr.Close()
if err != nil {
if _, err = io.Copy(ioutil.Discard, zr); err != nil {
return
}