copy.go 495 B

12345678910111213141516171819202122232425262728
  1. package cfio
  2. import (
  3. "io"
  4. "sync"
  5. )
  6. const defaultBufferSize = 16 * 1024
  7. var bufferPool = sync.Pool{
  8. New: func() interface{} {
  9. return make([]byte, defaultBufferSize)
  10. },
  11. }
  12. func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
  13. _, okWriteTo := src.(io.WriterTo)
  14. _, okReadFrom := dst.(io.ReaderFrom)
  15. var buffer []byte = nil
  16. if !(okWriteTo || okReadFrom) {
  17. buffer = bufferPool.Get().([]byte)
  18. defer bufferPool.Put(buffer)
  19. }
  20. return io.CopyBuffer(dst, src, buffer)
  21. }