type ReadWriter struct {
*Reader
*Writer
}
func NewReadWriter(r *Reader, w *Writer) *ReadWriter
在函数 NewReadWriter() 中,参数 r 是要读取的来源 Reader 对象,参数 w 是要写入的目的 Writer 对象。
type Reader struct {
//contains filtered or unexported fields
)
func NewReader(rd io.Reader) *Reader
其中,参数 rd 是 io.Reader 接口,Reader 对象将从该接口读取数据。func NewReaderSize(rd io.Reader, size int) *Reader
其中,参数 rd 是 io.Reader 接口,参数 size 是指定的缓冲区字节长度。func (b *Reader) Read(p []byte) (n int, err error)
在方法 Read() 中,参数 p 是用于存放读取数据的字节切片。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("C语言中文网") rd := bytes.NewReader(data) r := bufio.NewReader(rd) var buf [128]byte n, err := r.Read(buf[:]) fmt.Println(string(buf[:n]), n, err) }运行结果如下:
C语言中文网 16 <nil>
func (b *Reader) ReadByte() (c byte,err error)
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) c, err := r.ReadByte() fmt.Println(string(c), err) }运行结果如下:
G <nil>
func (b *Reader) ReadBytes(delim byte) (line []byte, err error)
其中,参数 delim 用于指定分割字节。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("C语言中文网, Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) var delim byte = ',' line, err := r.ReadBytes(delim) fmt.Println(string(line), err) }运行结果如下:
C语言中文网, <nil>
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("Golang is a beautiful language. \r\n I like it!") rd := bytes.NewReader(data) r := bufio.NewReader(rd) line, prefix, err := r.ReadLine() fmt.Println(string(line), prefix, err) }运行结果如下:
Golang is a beautiful language. false <nil>
func (b *Reader) ReadRune() (r rune, size int, err error)
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("C语言中文网") rd := bytes.NewReader(data) r := bufio.NewReader(rd) ch, size, err := r.ReadRune() fmt.Println(string(ch), size, err) }运行结果如下:
C 1 <nil>
func (b *Reader) ReadSlice(delim byte) (line []byte, err error)
其中,参数 delim 用于指定分割字节。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("C语言中文网, Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) var delim byte = ',' line, err := r.ReadSlice(delim) fmt.Println(string(line), err) line, err = r.ReadSlice(delim) fmt.Println(string(line), err) line, err = r.ReadSlice(delim) fmt.Println(string(line), err) }运行结果如下:
C语言中文网, <nil>
Go语言入门教程 EOF
EOF
func (b *Reader) ReadString(delim byte) (line string, err error)
其中,参数 delim 用于指定分割字节。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("C语言中文网, Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) var delim byte = ',' line, err := r.ReadString(delim) fmt.Println(line, err) }运行结果为:
C语言中文网, <nil>
func (b *Reader) UnreadByte() error
func (b *Reader) UnreadRune() error
package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) var buf [14]byte n, err := r.Read(buf[:]) fmt.Println(string(buf[:n]), n, err) rn := r.Buffered() fmt.Println(rn) n, err = r.Read(buf[:]) fmt.Println(string(buf[:n]), n, err) rn = r.Buffered() fmt.Println(rn) }运行结果如下:
Go语言入门 14 <nil>
6
教程 6 <nil>
0
func (b *Reader) Peek(n int) ([]byte, error)
在方法 Peek() 中,参数 n 是希望读取的字节数。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { data := []byte("Go语言入门教程") rd := bytes.NewReader(data) r := bufio.NewReader(rd) bl, err := r.Peek(8) fmt.Println(string(bl), err) bl, err = r.Peek(14) fmt.Println(string(bl), err) bl, err = r.Peek(20) fmt.Println(string(bl), err) }运行结果如下:
Go语言 <nil>
Go语言入门 <nil>
Go语言入门教程 <nil>
type Writer struct {
//contains filtered or unexported fields
}
func NewWriter(wr io.Writer) *Writer
其中,参数 wr 是 io.Writer 接口,Writer 对象会将数据写入该接口。func NewWriterSize(wr io.Writer, size int) *Writer
其中,参数 wr 是 io.Writer 接口,参数 size 是指定的缓冲区字节长度。func (b *Writer) Available() int
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) p := []byte("C语言中文网") fmt.Println("写入前未使用的缓冲区为:", w.Available()) w.Write(p) fmt.Printf("写入%q后,未使用的缓冲区为:%d\n", string(p), w.Available()) }运行结果如下:
写入前未使用的缓冲区为: 4096
写入"C语言中文网"后,未使用的缓冲区为:4080
func (b *Writer) Buffered() int
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) p := []byte("C语言中文网") fmt.Println("写入前未使用的缓冲区为:", w.Buffered()) w.Write(p) fmt.Printf("写入%q后,未使用的缓冲区为:%d\n", string(p), w.Buffered()) w.Flush() fmt.Println("执行 Flush 方法后,写入的字节数为:", w.Buffered()) }该例测试结果为:
写入前未使用的缓冲区为: 0
写入"C语言中文网"后,未使用的缓冲区为:16
执行 Flush 方法后,写入的字节数为: 0
func (b *Writer) Flush() error
示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) p := []byte("C语言中文网") w.Write(p) fmt.Printf("未执行 Flush 缓冲区输出 %q\n", string(wr.Bytes())) w.Flush() fmt.Printf("执行 Flush 后缓冲区输出 %q\n", string(wr.Bytes())) }运行结果如下:
未执行 Flush 缓冲区输出 ""
执行 Flush 后缓冲区输出 "C语言中文网"
func (b *Writer) Write(p []byte) (nn int, err error)
其中,参数 p 是要写入的字节切片。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) p := []byte("C语言中文网") n, err := w.Write(p) w.Flush() fmt.Println(string(wr.Bytes()), n, err) }运行结果如下:
C语言中文网 16 <nil>
func (b *Writer) WriteByte(c byte) error
其中,参数 c 是要写入的字节数据,比如 ASCII 字符。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) var c byte = 'G' err := w.WriteByte(c) w.Flush() fmt.Println(string(wr.Bytes()), err) }运行结果如下:
G <nil>
func (b *Writer) WriteRune(r rune) (size int,err error)
其中,参数 r 是要写入的 Unicode 字符。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) var r rune = 'G' size, err := w.WriteRune(r) w.Flush() fmt.Println(string(wr.Bytes()), size, err) }该例测试结果为:
G 1 <nil>
func (b *Writer) WriteString(s string) (int, error)
其中,参数 s 是要写入的字符串。示例代码如下:package main import ( "bufio" "bytes" "fmt" ) func main() { wr := bytes.NewBuffer(nil) w := bufio.NewWriter(wr) s := "C语言中文网" n, err := w.WriteString(s) w.Flush() fmt.Println(string(wr.Bytes()), n, err) }运行结果如下:
C语言中文网 16 <nil>
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有