缓冲式流复制Buffered stream copy

通过有限大小的缓冲反复读取和写出,复制任意长度的数据流。

核心约束
只消费实际读到的字节,并正确处理短写、结束与错误。
适用问题
文件传输、网络正文转发、流式处理与 I/O 适配。
边界与取舍
I/O 延迟、系统调用与可选快路径改变实际成本;缓冲复制不等同零拷贝。

常见操作#

n 为复制字节数,B 为缓冲区字节数;针对普通 read/write 复制循环。

操作时间成本条件与说明
复制全部数据O(n)O(n) 字节处理每个字节经过读写路径;实际耗时含设备、系统调用和阻塞。
批量读写理想满块时约 O(nB)O\left(\frac{n}{B}\right) 轮短读 / 短写、错误和非阻塞接口可能增加轮次,不能保证每次都填满 B。
能力特化由 ReaderFrom / WriterTo 等路径决定可能使用零拷贝系统调用等优化;提供缓冲区不保证它一定被使用。

时间与空间#

时间成本
普通路径 O(n)O(n),阻塞等待与特化路径另计
空间成本
O(B)O(B) 用户缓冲区

EOF、部分成功和错误传播是正确性的一部分。使用固定缓冲区可避免把整个输入载入内存。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Go · io.CopyBuffer缓冲区复用、WriterTo / ReaderFrom 分派以及返回语义。

Go 1.23 · copyBuffer implementation通用复制循环、短写检查和接口能力分派。

6 个概念