Go基礎篇【第8篇】: 內置庫模塊 bytes [二]

type Reader 

type Reader struct {
    // 內含隱藏或非導出字段
}

Reader類型經過從一個[]byte讀取數據,實現了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。git

func NewReader

func NewReader(b []byte) *Reader

NewReader建立一個從s讀取數據的Reader。github

func (*Reader) Len

func (r *Reader) Len() int

Len返回r包含的切片中尚未被讀取的部分。golang

func (*Reader) Read

func (r *Reader) Read(b []byte) (n int, err error)

func (*Reader) ReadByte

func (r *Reader) ReadByte() (b byte, err error)

func (*Reader) UnreadByte

func (r *Reader) UnreadByte() error

func (*Reader) ReadRune

func (r *Reader) ReadRune() (ch rune, size int, err error)

func (*Reader) UnreadRune

func (r *Reader) UnreadRune() error

func (*Reader) Seek

func (r *Reader) Seek(offset int64, whence int) (int64, error)

Seek實現了io.Seeker接口。函數

func (*Reader) ReadAt

func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)

func (*Reader) WriteTo

func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

WriteTo實現了io.WriterTo接口。ui

type Buffer

type Buffer struct {
    // 內含隱藏或非導出字段
}

Buffer是一個實現了讀寫方法的可變大小的字節緩衝。本類型的零值是一個空的可用於讀寫的緩衝。編碼

func NewBuffer

func NewBuffer(buf []byte) *Buffer

NewBuffer使用buf做爲初始內容建立並初始化一個Buffer。本函數用於建立一個用於讀取已存在數據的buffer;也用於指定用於寫入的內部緩衝的大小,此時,buf應爲一個具備指定容量但長度爲0的切片。buf會被做爲返回值的底層緩衝切片。spa

大多數狀況下,new(Buffer)(或只是聲明一個Buffer類型變量)就足以初始化一個Buffer了。指針

func NewBufferString

func NewBufferString(s string) *Buffer

NewBuffer使用s做爲初始內容建立並初始化一個Buffer。本函數用於建立一個用於讀取已存在數據的buffer。code

大多數狀況下,new(Buffer)(或只是聲明一個Buffer類型變量)就足以初始化一個Buffer了。htm

func (*Buffer) Reset

func (b *Buffer) Reset()

Reset重設緩衝,所以會丟棄所有內容,等價於b.Truncate(0)。

func (*Buffer) Len

func (b *Buffer) Len() int

返回緩衝中未讀取部分的字節長度;b.Len() == len(b.Bytes())。

func (*Buffer) Bytes

func (b *Buffer) Bytes() []byte

返回未讀取部分字節數據的切片,len(b.Bytes()) == b.Len()。若是中間沒有調用其餘方法,修改返回的切片的內容會直接改變Buffer的內容。

func (*Buffer) String

func (b *Buffer) String() string

將未讀取部分的字節數據做爲字符串返回,若是b是nil指針,會返回"<nil>"。

func (*Buffer) Truncate

func (b *Buffer) Truncate(n int)

丟棄緩衝中除前n字節數據外的其它數據,若是n小於零或者大於緩衝容量將panic。

func (*Buffer) Grow

func (b *Buffer) Grow(n int)

必要時會增長緩衝的容量,以保證n字節的剩餘空間。調用Grow(n)後至少能夠向緩衝中寫入n字節數據而無需申請內存。若是n小於零或者不能增長容量都會panic。

func (*Buffer) Read

func (b *Buffer) Read(p []byte) (n int, err error)

Read方法從緩衝中讀取數據直到緩衝中沒有數據或者讀取了len(p)字節數據,將讀取的數據寫入p。返回值n是讀取的字節數,除非緩衝中徹底沒有數據能夠讀取並寫入p,此時返回值err爲io.EOF;不然err老是nil。

func (*Buffer) Next

func (b *Buffer) Next(n int) []byte

返回未讀取部分前n字節數據的切片,而且移動讀取位置,就像調用了Read方法同樣。若是緩衝內數據不足,會返回整個數據的切片。切片只在下一次調用b的讀/寫方法前才合法。

func (*Buffer) ReadByte

func (b *Buffer) ReadByte() (c byte, err error)

ReadByte讀取並返回緩衝中的下一個字節。若是沒有數據可用,返回值err爲io.EOF。

func (*Buffer) UnreadByte

func (b *Buffer) UnreadByte() error

UnreadByte吐出最近一次讀取操做讀取的最後一個字節。若是最後一次讀取操做以後進行了寫入,本方法會返回錯誤。

func (*Buffer) ReadRune

func (b *Buffer) ReadRune() (r rune, size int, err error)

ReadRune讀取並返回緩衝中的下一個utf-8碼值。若是沒有數據可用,返回值err爲io.EOF。若是緩衝中的數據是錯誤的utf-8編碼,本方法會吃掉一字節並返回(U+FFFD, 1, nil)。

func (*Buffer) UnreadRune

func (b *Buffer) UnreadRune() error

UnreadRune吐出最近一次調用ReadRune方法讀取的unicode碼值。若是最近一次讀寫操做不是ReadRune,本方法會返回錯誤。(這裏就能看出來UnreadRune比UnreadByte嚴格多了)

func (*Buffer) ReadBytes

func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)

ReadBytes讀取直到第一次遇到delim字節,返回一個包含已讀取的數據和delim字節的切片。若是ReadBytes方法在讀取到delim以前遇到了錯誤,它會返回在錯誤以前讀取的數據以及該錯誤(通常是io.EOF)。當且僅當ReadBytes方法返回的切片不以delim結尾時,會返回一個非nil的錯誤。

func (*Buffer) ReadString

func (b *Buffer) ReadString(delim byte) (line string, err error)

ReadString讀取直到第一次遇到delim字節,返回一個包含已讀取的數據和delim字節的字符串。若是ReadString方法在讀取到delim以前遇到了錯誤,它會返回在錯誤以前讀取的數據以及該錯誤(通常是io.EOF)。當且僅當ReadString方法返回的切片不以delim結尾時,會返回一個非nil的錯誤。

func (*Buffer) Write

func (b *Buffer) Write(p []byte) (n int, err error)

Write將p的內容寫入緩衝中,如必要會增長緩衝容量。返回值n爲len(p),err老是nil。若是緩衝變得太大,Write會採用錯誤值ErrTooLarge引起panic。

func (*Buffer) WriteString

func (b *Buffer) WriteString(s string) (n int, err error)

Write將s的內容寫入緩衝中,如必要會增長緩衝容量。返回值n爲len(p),err老是nil。若是緩衝變得太大,Write會採用錯誤值ErrTooLarge引起panic。

func (*Buffer) WriteByte

func (b *Buffer) WriteByte(c byte) error

WriteByte將字節c寫入緩衝中,如必要會增長緩衝容量。返回值老是nil,但仍保留以匹配bufio.Writer的WriteByte方法。若是緩衝太大,WriteByte會採用錯誤值ErrTooLarge引起panic。

func (*Buffer) WriteRune

func (b *Buffer) WriteRune(r rune) (n int, err error)

WriteByte將unicode碼值r的utf-8編碼寫入緩衝中,如必要會增長緩衝容量。返回值老是nil,但仍保留以匹配bufio.Writer的WriteRune方法。若是緩衝太大,WriteRune會採用錯誤值ErrTooLarge引起panic。

func (*Buffer) ReadFrom

func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)

ReadFrom從r中讀取數據直到結束並將讀取的數據寫入緩衝中,如必要會增長緩衝容量。返回值n爲從r讀取並寫入b的字節數;會返回讀取時遇到的除了io.EOF以外的錯誤。若是緩衝太大,ReadFrom會採用錯誤值ErrTooLarge引起panic。

func (*Buffer) WriteTo

func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)

WriteTo從緩衝中讀取數據直到緩衝內沒有數據或遇到錯誤,並將這些數據寫入w。返回值n爲從b讀取並寫入w的字節數;返回值老是能夠無溢出的寫入int類型,但爲了匹配io.WriterTo接口設爲int64類型。從b讀取是遇到的非io.EOF錯誤及寫入w時遇到的錯誤都會終止本方法並返回該錯誤。

相關文章
相關標籤/搜索