上一篇 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