Files
rkKVM/utils/io.go
2024-10-30 13:23:52 +01:00

51 lines
716 B
Go

package utils
import (
"errors"
"io"
"sync"
)
var (
blockSize = 32
)
var (
ErrNoBuf = errors.New("no buffer can be used")
pool = sync.Pool{
New: func() interface{} {
return make([]byte, blockSize*1024)
},
}
)
func getBuffer() []byte {
if buffer, ok := pool.Get().([]byte); ok {
return buffer
}
return nil
}
func putBuffer(buffer []byte) {
pool.Put(buffer)
}
func Copy(dst io.Writer, src io.Reader) (int64, error) {
if wt, ok := src.(io.WriterTo); ok {
return wt.WriteTo(dst)
}
if rt, ok := dst.(io.ReaderFrom); ok {
return rt.ReadFrom(src)
}
if buffer := getBuffer(); nil != buffer {
defer putBuffer(buffer)
return io.CopyBuffer(dst, src, buffer)
}
return 0, ErrNoBuf
}