123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package iox
- import (
- "bytes"
- "sync"
- )
- // A BufferPool is a pool to buffer bytes.Buffer objects.
- type BufferPool struct {
- capability int
- pool *sync.Pool
- }
- // NewBufferPool returns a BufferPool.
- func NewBufferPool(capability int) *BufferPool {
- return &BufferPool{
- capability: capability,
- pool: &sync.Pool{
- New: func() any {
- return new(bytes.Buffer)
- },
- },
- }
- }
- // Get returns a bytes.Buffer object from bp.
- func (bp *BufferPool) Get() *bytes.Buffer {
- buf := bp.pool.Get().(*bytes.Buffer)
- buf.Reset()
- return buf
- }
- // Put returns buf into bp.
- func (bp *BufferPool) Put(buf *bytes.Buffer) {
- if buf == nil {
- return
- }
- if buf.Cap() < bp.capability {
- bp.pool.Put(buf)
- }
- }
|