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