上一篇 Go圣经-学习笔记入门bufio.Scannergolang
bufio标准库中的Reader和Writer,最好用于文件IO操做,把数据先缓存到内存中,而后再总体作文件IO操做,尽最大可能地减小磁盘IO,可是内存缓冲区的大小要合理设置,默认大小是4096个字节。缓存
bufio标准库中的Writer提供的方法列表学习
type Writer struct { err error buf []byte n int wr io.Writer } // 实例化bufio.Writer, 实例化是会直接分配大小为len(w.buf)大小的内存空间,Writer.n表示内存缓冲区已经存放的字节大小 func NewWriter(w io.Writer) *Writer func NewWriterSize(w io.Writer, size int) *Writer // 表示可用的内存缓冲区大小len(b.buf)-n func (b *Writer) Avaliable() int // 表示已使用的内存缓冲区大小b.n func (b *Writer) Buffered() int // 这个首字母大写,表示用户能够手动触发内存缓冲区的数据,回写到wr.Write所指定的地方,通常为磁盘IO回写 func (b *Writer) Flush() error // bufio.Writer把数据写到缓冲区挺有意思的。 // 开发者能够阅读源码了解一下。我举第二个方法Write([]byte) func (b *Writer) ReadFrom(r io.Reader) (int64, error) func (b *Writer) Write(p []byte) (int, error) func (b *Writer) WriteByte(c byte) error func (b *Writer) WriteRune(r rune) (int, error) func (b *Writer) WriteString(s string) (int, error)
对于func (b *Writer) Write(p []byte) (int, error)
方法的正确理解:.net
第一种:若是剩余要处理的p数据小于内存缓冲区的大小, 则把剩余数据p写入到内存缓冲区;第二种:若是剩余要处理的p数据大于等于内存缓冲区,则不必缓冲了,直接总体一次回写到磁盘
。总结:bufio的Reader和Writer操做通常适用于磁盘IO的读写场景。同时了解标准库的实现, 能够提升本身的编程思惟。标准库bufio确实写得颇有意思。code