IO族

image.png
image.png

io.Reader & io.Writer —— 顶级接口

关于io.Readerio.Writer接口,可以简单理解为读源和写源。
只要实现了Reader中的Read方法,这个东西就可以作为读源,里面可以包含数据,被我们读取。Writer也是如此。
当返回err == io.EOF时,表示已经读取完成,所以err != nil 不一定表示读取出错,可能是读取完成
这是io库中最顶级的接口
image.png

bufio —— 有缓存的io(比ioutil强大)

bufio,可以理解为在io库的基础上额外封装加了一个缓存层,(读取大文件的时候可以分段读取,比ioutil好,功能更强大)
它提供了很多按行进行读写的函数,
从io库的按字节读写变为按行读写对写代码来说还是方便了不少。
默认的缓冲区的大小为4096,可进去看源码
image.png
bufio.Reader主要方法如下:
image.png

ioutil —— io的工具包

ioutil库是一个io工具包,它提供了很多实用的 IO 工具函数,例如 ReadAll、ReadFile、WriteFile、ReadDir。
唯一需要注意的是它们都是一次性读取和一次性写入,所以使用时,尤其是把数据从文件里一次性读到内存中时需要注意文件的大小。
主要方法如下:
image.png
image.png

bytes.Reader 和 strings.Reader

bytes 和 strings 库里的 bytes.Reader 和string.Reader,它们都实现了io.Reader接口,
提供了NewReader方法用来从[]byte或者string类型的变量直接构建出相应的Reader实现。
image.png