一、io
1、两个接口
Go 的
Go 官方提供了一些
围绕
net.Conn ,os.Stdin ,os.File : 网络、标准输入输出、文件的流读取strings.Reader : 把字符串抽象成Reader(类似流那样,这样就有各种API了)bytes.Reader : 把[]byte抽象成Readerbytes.Buffer : 把[]byte抽象成Reader和Writerbufio.Reader/Writer : 抽象成带缓冲的流读取(比如按行读写)
什么是流?流是一种数据的载体,通过它可以实现数据交换和传输;
比如说程序读取文件,程序通过流从文件中读取数据,也通过向流中写入数据,最终写入到文件中;
代码中打开文件,就会返回一个流,这个流连通着文件和程序;
关于io.EOF
EOF是End-Of-File的缩写,表示输入流的结尾. 因为每个文件都有一个结尾;
2、io.Reader
该接口只有一个方法,
3、io.Writer
该接口只有一个方法,
4、辅助函数
5、PipeReader和PipeWriter
Pipe创建一个同步的内存中的管道,类型
数据被写入管道的一端,并使用单独的 goroutine 在管道的另一端读取。
6、特殊Reader
二、io_ioutil
1、ioutil
2、函数
3、os.File
类型
4、os.Stdout ,os.Stdin 和 os.Stderr
这三者类型均为
三、bufio
bufio 包实现了缓存IO。它包装了 io.Reader 和 io.Writer 对象,创建了另外的Reader和Writer对象,它们也实现了io.Reader和io.Writer接口,不过它们是有缓存的。
数据缓冲功能,能够一定程度减少大块数据读写带来的开销。
简单说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高速度。
1、Reader 类型和方法
2、Writer
3、Scanner
Scanner是有缓存的,意思是Scanner底层维护了一个Slice用来保存已经从Reader中读取的数据;
Scanner本身不负责关闭文件描述符,需要自己在外面关闭;
这缓冲区是怎么样的?
四、bytes/strings
1、这两个包是相当类似的,只是一个操作[]byte,一个操作string罢了
2、功能:equal,container,ToLower,ToUpper,repeat(返回n个串联的字符串),replace,Trim,Split,Join(连接多个string)
3、bytes还拥有buff功能