-
Notifications
You must be signed in to change notification settings - Fork 0
golang io interface
WinChua edited this page Aug 4, 2020
·
1 revision
- io.Reader
type Reader interface {
Read(p []byte) (n int, err error)
}Read从底层的设备中读取一定数量的字节流放进p中,Read的约定行为
- 读取最多len(p)长度的字节
- 即使返回的n小于len(p), Reade方法也可能把整个p的存储空间用作暂存空间
- 返回行为: 当Read方法遇到一个错误,包括EOF,的时候,方法就会返回, 错误可能会同时返回也可能在下一次调用中返回; 也就是说,如果一个reader在输入结束的时候返回了n>0, err可能会返回EOF,也可能是nil, 但是下一次调用一定返回 0, EOF
- 调用方必须对n>0的情况进行处理,不论err是否为nil,保证读取到的数据是完整的;
- Read方法的实现上不推荐返回0, nil, 因为0, nil表示没有发生任何事
- io.Writer
type Writer interface {
Write(p []byte) (n int, err error)
}将p中的字节流写入到底层设备中,约定行为:
- 写入的字节数量可能是0 <= n <= len(p)
- Write的实现不能对p进行任何的修改;
- 如果返回n < len(p), 则err也一定不为nil
- bufio
bytes, strings 一个很重要的作用就是将string以及[]byte适配了io.Writer,io.Reader的接口, 让一些包能够像操作文件一样操作内存数据 在线上代码中很少使用bytes.Bytes, 因为已经有了另外一个包bufio实现对应的功能了.