golang io interface - WinChua/blog GitHub Wiki

接口

1.io相关

  • io.Reader
type Reader interface {
   Read(p []byte) (n int, err error)
}

Read从底层的设备中读取一定数量的字节流放进p中,Read的约定行为

  1. 读取最多len(p)长度的字节
  2. 即使返回的n小于len(p), Reade方法也可能把整个p的存储空间用作暂存空间
  3. 返回行为: 当Read方法遇到一个错误,包括EOF,的时候,方法就会返回, 错误可能会同时返回也可能在下一次调用中返回; 也就是说,如果一个reader在输入结束的时候返回了n>0, err可能会返回EOF,也可能是nil, 但是下一次调用一定返回 0, EOF
  4. 调用方必须对n>0的情况进行处理,不论err是否为nil,保证读取到的数据是完整的;
  5. Read方法的实现上不推荐返回0, nil, 因为0, nil表示没有发生任何事
  • io.Writer
type Writer interface {
    Write(p []byte) (n int, err error) 
}

将p中的字节流写入到底层设备中,约定行为:

  1. 写入的字节数量可能是0 <= n <= len(p)
  2. Write的实现不能对p进行任何的修改;
  3. 如果返回n < len(p), 则err也一定不为nil
  • bufio

摘录:

bytes, strings 一个很重要的作用就是将string以及[]byte适配了io.Writer,io.Reader的接口, 让一些包能够像操作文件一样操作内存数据 在线上代码中很少使用bytes.Bytes, 因为已经有了另外一个包bufio实现对应的功能了.

reference

[1] walkthrouth-bytes-strings