golang io包学习

//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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值