qieqieplus
3 years ago
2 changed files with 64 additions and 21 deletions
@ -0,0 +1,53 @@ |
|||
package util |
|||
|
|||
import ( |
|||
"compress/gzip" |
|||
"fmt" |
|||
"io" |
|||
"sync" |
|||
) |
|||
|
|||
var ( |
|||
gzipReaderPool = sync.Pool{ |
|||
New: func() interface{} { |
|||
return new(gzip.Reader) |
|||
//return gzip.NewReader()
|
|||
}, |
|||
} |
|||
|
|||
gzipWriterPool = sync.Pool{ |
|||
New: func() interface{} { |
|||
w, _ := gzip.NewWriterLevel(nil, gzip.BestSpeed) |
|||
return w |
|||
}, |
|||
} |
|||
) |
|||
|
|||
func GzipStream(w io.Writer, r io.Reader) (int64, error) { |
|||
gw, ok := gzipWriterPool.Get().(*gzip.Writer) |
|||
if !ok { |
|||
return 0, fmt.Errorf("gzip: new writer error") |
|||
} |
|||
gw.Reset(w) |
|||
defer func() { |
|||
gw.Close() |
|||
gzipWriterPool.Put(gw) |
|||
}() |
|||
return io.Copy(gw, r) |
|||
} |
|||
|
|||
func GunzipStream(w io.Writer, r io.Reader) (int64, error) { |
|||
gr, ok := gzipReaderPool.Get().(*gzip.Reader) |
|||
if !ok { |
|||
return 0, fmt.Errorf("gzip: new reader error") |
|||
} |
|||
|
|||
if err := gr.Reset(r); err != nil { |
|||
return 0, err |
|||
} |
|||
defer func() { |
|||
gr.Close() |
|||
gzipReaderPool.Put(gr) |
|||
}() |
|||
return io.Copy(w, gr) |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue