//golang io包学习
//package io
//import io
/*
io包提供了对i/o 原语的基本接口
本包的基本任务是包装这些原语已有的实现
使之成为公共的接口
这些公共接口抽象出了范用的函数并附加了一些相关的源于操作
*/
var EOF = errors.New("EOF")
//EOF 当无法得到更多的输入时 Read方法返回EOF
//当函数一切正常的到达输入的结束时就应返回EOF 如果在一个结构化数据流中
//EOF在不期望的位置出现了 则应返回错误ErrUnexpectedEOF
var ErrClosedPipe = errors.New("io:read/write on closed pipe")
//从一个已关闭的Pipe读取或者写入时 返回ErrClosedPipe
var ErrNoProgress = errors.New("multiple Read calls return no data or error")
//io.Reader接口客户端多次调用Read 都不返回数据也不返回错误时 就会返回本错误
//一般来说是io.Reader的实现有问题标志
var ErrShortBuffer = errors.New("short buffer")
//表示读取操作需要大缓冲 但提供的缓冲不够大
var ErrShortWrite = errors.New("short write")
//写入的数据比提供的少
var ErrUnpexpectedEOF = errors.New("unexpected EOF")
//读取一个固定尺寸的块或者数据结构时 在读取未完时遇到了EOF
type Reader interface{
Read(p byte[])(n int, err error)
}
type Writer interface{
Write(p []byte) (n int, err error)
}
type Closer interface{
Close() error
}
type Seeker interface{
Seek(offset int64, whence int)(int64, error)
}
//聚合接口
type ReadCloser interface{
Reader
Closer
}
type ReadSeeker interface{
Reader
Seeker
}
type WriteSeeker interface{
Writer
Seeker
}
type ReadWriter interface{
Reader
Writer
}
//小于 len(p) 会阻塞
type ReadAt interface{
ReadAt(p []byte, off int64)(n int, err error)
}
type WriterAt interface{
WriteAt(p []byte, off int64)(n int, err error)
}
type ByteReader interface{
ReadByte()(c byte, err error)
}
type ByteScanner interface{
ByteReader
UnreadByte() error
}
//读取单个utf-8编码的字符 返回该字符和字节长度 如果没有有效的字符 返回错误
type RuneReader interface{
ReadRune()(r rune, size int, err error)
}
type RuneScanner interface{
RuneReader
UnreadRune() error
}
type ByteWriter interface{
WriteByte(c byte) error
}
//从r读取数据直到EOF或遇到错误 返回值n是读取的字节数 执行时遇到错误也会返回
type ReaderFrom interface{
ReadFrom(r Reader)(n int64, err error)
}
//将数据写入w直到没有数据可以写或者遇到错误 返回值n是写入的字节数
type WriterTo interface{
WriteTo(w Writer)(n int64, err error)
}
type LimitedReader struct{
R Reader
N int64 //剩余可读取的字节数
}
func LimitReader(r Reader, n int64)Reader
func (*LimitedReader)Read(p []byte)(n int, err error)
//对底层满足ReadAt接口的输入流某个片段的Read ReadAt Seek
type SectionReader struct{
}
func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader
func (s *SectionReader) Size()int64
func (s *SectionReader) Read(p []byte)(n int, err error) {
}
func (s *SectionReader) ReadAt(p []byte, off int64)(n int, err error) {
}
func (s *SectionReader) Seek(offset int64, whence int)(int64, error) {
}
type PipeReader struct{
}
func Pipe()(*PipeReader, *PipeWriter)
//他从管道中读取数据 会阻塞直到写入端开始写入 或 写入端关闭
func (*PipeReader)Read(data []byte)(n int, err error)
func (*PipeReader)Close()error
func TeeReader(r Reader, w Writer)Reader
func Copy(dst Writer, src Reader)(written int64, err error)
func CopyN(dst Writer, src Reader, n int64)(written int64, err error)
func ReadAtLeast(r Reader, bul []byte, min int)(n int, err error)
func ReadFull(r Reader, buf []byte)(n int, err error)
func WriteString(w Writer, s string)(n int, err error)