type Reader struct {
// 內含隱藏或非導出字段
}
Reader類型經過從一個[]byte讀取數據,實現了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。git
func NewReader(b []byte) *Reader
NewReader建立一個從s讀取數據的Reader。github
func (r *Reader) Len() int
Len返回r包含的切片中尚未被讀取的部分。golang
func (r *Reader) Read(b []byte) (n int, err error)
func (r *Reader) ReadByte() (b byte, err error)
func (r *Reader) UnreadByte() error
func (r *Reader) ReadRune() (ch rune, size int, err error)
func (r *Reader) UnreadRune() error
func (r *Reader) Seek(offset int64, whence int) (int64, error)
Seek實現了io.Seeker接口。函數
func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
WriteTo實現了io.WriterTo接口。ui
type Buffer struct { // 內含隱藏或非導出字段 }
Buffer是一個實現了讀寫方法的可變大小的字節緩衝。本類型的零值是一個空的可用於讀寫的緩衝。編碼
func NewBuffer(buf []byte) *Buffer
NewBuffer使用buf做爲初始內容建立並初始化一個Buffer。本函數用於建立一個用於讀取已存在數據的buffer;也用於指定用於寫入的內部緩衝的大小,此時,buf應爲一個具備指定容量但長度爲0的切片。buf會被做爲返回值的底層緩衝切片。spa
大多數狀況下,new(Buffer)(或只是聲明一個Buffer類型變量)就足以初始化一個Buffer了。指針
func NewBufferString(s string) *Buffer
NewBuffer使用s做爲初始內容建立並初始化一個Buffer。本函數用於建立一個用於讀取已存在數據的buffer。code
大多數狀況下,new(Buffer)(或只是聲明一個Buffer類型變量)就足以初始化一個Buffer了。htm
func (b *Buffer) Reset()
Reset重設緩衝,所以會丟棄所有內容,等價於b.Truncate(0)。
func (b *Buffer) Len() int
返回緩衝中未讀取部分的字節長度;b.Len() == len(b.Bytes())。
func (b *Buffer) Bytes() []byte
返回未讀取部分字節數據的切片,len(b.Bytes()) == b.Len()。若是中間沒有調用其餘方法,修改返回的切片的內容會直接改變Buffer的內容。
func (b *Buffer) String() string
將未讀取部分的字節數據做爲字符串返回,若是b是nil指針,會返回"<nil>"。
func (b *Buffer) Truncate(n int)
丟棄緩衝中除前n字節數據外的其它數據,若是n小於零或者大於緩衝容量將panic。
func (b *Buffer) Grow(n int)
必要時會增長緩衝的容量,以保證n字節的剩餘空間。調用Grow(n)後至少能夠向緩衝中寫入n字節數據而無需申請內存。若是n小於零或者不能增長容量都會panic。
func (b *Buffer) Read(p []byte) (n int, err error)
Read方法從緩衝中讀取數據直到緩衝中沒有數據或者讀取了len(p)字節數據,將讀取的數據寫入p。返回值n是讀取的字節數,除非緩衝中徹底沒有數據能夠讀取並寫入p,此時返回值err爲io.EOF;不然err老是nil。
func (b *Buffer) Next(n int) []byte
返回未讀取部分前n字節數據的切片,而且移動讀取位置,就像調用了Read方法同樣。若是緩衝內數據不足,會返回整個數據的切片。切片只在下一次調用b的讀/寫方法前才合法。
func (b *Buffer) ReadByte() (c byte, err error)
ReadByte讀取並返回緩衝中的下一個字節。若是沒有數據可用,返回值err爲io.EOF。
func (b *Buffer) UnreadByte() error
UnreadByte吐出最近一次讀取操做讀取的最後一個字節。若是最後一次讀取操做以後進行了寫入,本方法會返回錯誤。
func (b *Buffer) ReadRune() (r rune, size int, err error)
ReadRune讀取並返回緩衝中的下一個utf-8碼值。若是沒有數據可用,返回值err爲io.EOF。若是緩衝中的數據是錯誤的utf-8編碼,本方法會吃掉一字節並返回(U+FFFD, 1, nil)。
func (b *Buffer) UnreadRune() error
UnreadRune吐出最近一次調用ReadRune方法讀取的unicode碼值。若是最近一次讀寫操做不是ReadRune,本方法會返回錯誤。(這裏就能看出來UnreadRune比UnreadByte嚴格多了)
func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
ReadBytes讀取直到第一次遇到delim字節,返回一個包含已讀取的數據和delim字節的切片。若是ReadBytes方法在讀取到delim以前遇到了錯誤,它會返回在錯誤以前讀取的數據以及該錯誤(通常是io.EOF)。當且僅當ReadBytes方法返回的切片不以delim結尾時,會返回一個非nil的錯誤。
func (b *Buffer) ReadString(delim byte) (line string, err error)
ReadString讀取直到第一次遇到delim字節,返回一個包含已讀取的數據和delim字節的字符串。若是ReadString方法在讀取到delim以前遇到了錯誤,它會返回在錯誤以前讀取的數據以及該錯誤(通常是io.EOF)。當且僅當ReadString方法返回的切片不以delim結尾時,會返回一個非nil的錯誤。
func (b *Buffer) Write(p []byte) (n int, err error)
Write將p的內容寫入緩衝中,如必要會增長緩衝容量。返回值n爲len(p),err老是nil。若是緩衝變得太大,Write會採用錯誤值ErrTooLarge引起panic。
func (b *Buffer) WriteString(s string) (n int, err error)
Write將s的內容寫入緩衝中,如必要會增長緩衝容量。返回值n爲len(p),err老是nil。若是緩衝變得太大,Write會採用錯誤值ErrTooLarge引起panic。
func (b *Buffer) WriteByte(c byte) error
WriteByte將字節c寫入緩衝中,如必要會增長緩衝容量。返回值老是nil,但仍保留以匹配bufio.Writer的WriteByte方法。若是緩衝太大,WriteByte會採用錯誤值ErrTooLarge引起panic。
func (b *Buffer) WriteRune(r rune) (n int, err error)
WriteByte將unicode碼值r的utf-8編碼寫入緩衝中,如必要會增長緩衝容量。返回值老是nil,但仍保留以匹配bufio.Writer的WriteRune方法。若是緩衝太大,WriteRune會採用錯誤值ErrTooLarge引起panic。
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)
ReadFrom從r中讀取數據直到結束並將讀取的數據寫入緩衝中,如必要會增長緩衝容量。返回值n爲從r讀取並寫入b的字節數;會返回讀取時遇到的除了io.EOF以外的錯誤。若是緩衝太大,ReadFrom會採用錯誤值ErrTooLarge引起panic。
func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
WriteTo從緩衝中讀取數據直到緩衝內沒有數據或遇到錯誤,並將這些數據寫入w。返回值n爲從b讀取並寫入w的字節數;返回值老是能夠無溢出的寫入int類型,但爲了匹配io.WriterTo接口設爲int64類型。從b讀取是遇到的非io.EOF錯誤及寫入w時遇到的錯誤都會終止本方法並返回該錯誤。