io包中的函数
func WriteString(w Writer, s String)(n int, err error)
功能:将字符串s写入到w中,如果w实现了WriteString方法,则直接调用它。
返回值:返回写入的字节数和写入过程中遇到的任何错误。
实例:
1 | package main |
源码:
1 | func WriteString(w Writer, s string) (n int, err error) { |
func ReadAtLeast(r Reader, buf []Byte, min int)(n int, err error)
返回值: 返回读取的字节数和读取过程中遇到的任何错误
功能:从r中读取数据到buf中,要求至少读取min个字节
错误返回类型:
- err返回ErrUnexpectedEOF:表示n<min
- err返回EOF:表示r中无可读取数据
- err返回ErrShortBuffer:表示min大于len(buf)
- err返回nil:表示n>=min
实例:
1 | package main |
源码:
1 | func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error) { |
func ReadFull(r Reader, buf []byte)(n int, err error)
功能:和ReadAtLeast一样,默认min=len(buf)
返回值:和ReadAtLest一样
func Copy(dst Writer, src Reader)(written int64, err error)
功能:从src中赋值数据到dst中,直到所有数据复制完毕
返回值:返回复制的字节数和复制时遇到的第一个错误。Copy成功返回 err == nil,
而不是err == EOF
特殊性:
- Copy 被定义为从src读取直到EOF为止,收益以Copy不会将来自Read的EOF当做错误来报告。
- 如果src实现了WriteTo接口,
Copy(dst Writer, src Reader)
等于src.WritenTo(dst)
- 如果dst实现了ReadFrom接口,
Copy(dst Writer, src Reader)
等于dst.ReadFrom(src)
实例:
1 | package main |
源码:
1 | func Copy(dst Writer, src Reader) (written int64, err error) { |
func CopyN(dst Writer, src Reader, n int64)(written int64, err error)
功能:从src中复制n个字节的数据到dst中。
CopyN和Copy一样只是通过LimitReader(src,n)来限制复制字节数。
其他:CopyN不能直接通过src.WritenTo(dst)实现,因为限制了copy过程中存在限制读取字节数。
源码:
1 | func CopyN(dst Writer, src Reader, n int64) (written int64, err error) { |
func LimitReader(r Reader, n int64)Reader
功能:返回一个Reader,它从r读取n个字节后以EOF结束
其他: 基本实现为 *LimitedReader
源码:
1 | // LimitedReader 从 R 读取但将返回的数据量限制为 N 字节。每调用一次 Read |
func NewSectionReader(r ReaderAt, off int64, n int64)*SectionReader
功能:从r中off的位置读取n个字节的数据,读取完毕后返回EOF
返回值:返回一个SectionReader
func(s *SectionReader)Size()
功能:返回s中被限制读取的字节数
func TeeReader(r Reader, w Writer)Reader
功能: 返回一个将其从r读取的数据写入w的Reader接口,使r在读取数据的同时,自动向w中写入数据。
返回值:返回一个Reader接口。
特性:
- 没有内部的缓冲区,(即,写入必须在读取完成前完成)。
- 写入时发生的任何错误都作为读取错误返回。
实例:
1 | package main |
源码:
1 | func TeeReader(r Reader, w Writer) Reader { |
更多功能参考:
golang io包源码地址