Golang标准库——io-接口

本文详细介绍了标准IO接口,包括Reader和Writer的基本操作,如Read、Write、ReadFrom、WriteTo等,以及更高级的接口如ReaderAt、WriterAt,用于处理特定偏移量的读写操作。此外,还涵盖了ByteReader、RuneReader、ByteWriter等接口,以及Seeker接口,用于文件位置的移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口

Read相关

Reader

Reader接口用于包装基本的读取方法。

type Reader interface {
    //将数据读入到p中,直到读满p或者读取的过程中遇到错误,此时返回的n<len(p)同时err!=nil
    //如果正常结束的话n也可能小于len(p),此时err==io.EOF(var EOF = errors.New("EOF"))
    Read(p []byte) (n int, err error)
}
ReaderFrom

ReaderFrom实现从其他Reader读取数据

type ReaderFrom interface {
    //从 r 中读取数据,直到 EOF 或发生错误。
    //不会返回EOF错误
    ReadFrom(r Reader) (n int64, err error)
}
ReaderAt

ReaderAt接口使得可以从指定偏移量处开始读取数据。

type ReaderAt interface {
    //从基本输入源的偏移量 off 处开始,将 len(p) 个字节读取到 p 中。
    //若一些数据可用但不到 len(p) 字节,ReadAt 就会阻塞直到所有数据都可用或产生一个错误。 在这一点上 ReadAt 不同于 Read。
    //若 ReadAt 按查找偏移量从输入源读取,ReadAt 应当既不影响基本查找偏移量也不被它所影响。
    ReadAt(p []byte, off int64) (n int, err error)
}
ByteReader/RuneReader

读取一个Byte或Rune。

type ByteReader interface {
    ReadByte() (byte, error)
}
type RuneReader interface {
    //读取单个UTF-8字符,返回其rune和该字符占用的字节数。
    ReadRune() (r rune, size int, err error)
}
ByteScanner/RuneScanner

在ByteReader/RuneReader基础上增加了一个UnreadByte/UnreadRune方法,作用在于读取后回退一个,不能连续回退

type RuneScanner interface {
    RuneReader
    UnreadRune() error
}

Write相关

Writer

用于包装基本的写入方法。

type Writer interface {
    //len(p) 字节数据从p写入底层的数据流
    //返回写入的字节数(0 <= n <= len(p))和遇到的任何导致写入提取结束的错误
    Write(p []byte) (n int, err error)
}
WriterTo
type WriterTo interface {
    //将数据写入w直到没有数据可以写入或者遇到错误
    //返回值n是写入的字节数,执行时遇到的任何错误也会被返回
    WriteTo(w Writer) (n int64, err error)
}
WriterAt
type WriterAt interface {
    //将p全部len(p)字节数据写入底层数据流的偏移量off位置
    //WriteAt写入的对象是某个有偏移量的底层输出流
    //WriteAt方法既不应影响底层的偏移量,也不应被底层的偏移量影响
    WriteAt(p []byte, off int64) (n int, err error)
}
ByteWriter
type ByteWriter interface {
    WriteByte(c byte) error
}

其他接口

Seeker

包装基本的移位方法,还有其与Reader、Writer接口结合的接口。

type Seeker interface {
    //Seek方法设定下一次读写的位置
    //偏移量为offset
    //校准点由whence确定:0表示相对于文件起始;1表示相对于当前位置;2表示相对于文件结尾
    Seek(offset int64, whence int) (int64, error)
}

转载于:https://www.cnblogs.com/suolu/p/6731182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值