funcCopyN(dst Writer, src Reader, n int64)(written int64, err error) { written, err = Copy(dst, LimitReader(src, n)) if written == n { return n, nil } if written < n && err == nil { // src stopped early; must have been EOF. err = EOF } return }
仅仅是加了限定的 io.Copy 方法。 在看看我们熟悉的io.Copy 方法.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
funccopyBuffer(dst Writer, src Reader, buf []byte)(written int64, err error) { if wt, ok := src.(WriterTo); ok { return wt.WriteTo(dst) } if rt, ok := dst.(ReaderFrom); ok { return rt.ReadFrom(src) } // 省略 // 创建buffer // for { // read // write // } }
sendfile() copies data between onefile descriptor and another. Because this copying is done withinthe kernel, sendfile() is more efficient than the combination ofread(2) andwrite(2), which would require transferring data toandfrom user space.