Go中常用包笔记 bufio:带缓冲的IO操作/SCANNER(二)
admin
2023-07-30 10:00:06
0次

Package bufio

提供可缓存的IO访问



 
 Scanner:
    func NewScanner(r io.Reader) *Scanner //构造函数
   func (s *Scanner) Buffer(buf []byte, max int) //指定使用的缓冲区
   func (s *Scanner) Split(split SplitFunc) //设定切割函数 使用四个切割器
   func (s *Scanner) Scan() bool  //扫描
   func (s *Scanner) Err() error  //扫描发生的错误
   func (s *Scanner) Bytes() []byte //上次扫描的结果
   func (s *Scanner) Text() string  //上次扫描的结果
   
切割器:
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)

四个切割器,分割字节数组中的第一个字节/第一行/第一个Rune(UTF8字)/单词(不包含空格),方法本身可以作为

func (s *Scanner) Split(split SplitFunc)

的参数,配合Scanner按照字节/Rune/单词/行进行扫描,例如:

s := strings.NewReader()
bs := bufio.NewScanner(s)
bs.Split(bufio.ScanWords)
bs.Scan() {
       fmt.Printf(, bs.Text())
}
 func (s *Scanner) Bytes() []byte


  Reader

    func NewReader(rd io.Reader) *Reader  //构造函数

    func NewReaderSize(rd io.Reader, size int) *Reader //构造函数,指定缓冲区大小

    func (b *Reader) Buffered() int //获取缓冲区中数据大小

    func (b *Reader) Discard(n int) (discarded int, err error) //跳过若干字节不读,实际跳过的字节不会比缓冲区剩余的多(若缓冲区为空则填充一次缓冲区)

    func (b *Reader) Peek(n int) ([]byte, error)  //返回缓冲区的一个切片(缓冲区的引用,不会将数据读出)

    func (b *Reader) Read(p []byte) (n int, err error) //读取若干字节

    func (b *Reader) ReadByte() (byte, error)          //读取一个字节

    func (b *Reader) ReadBytes(delim byte) ([]byte, error) //寻找一个字节并返回字节之前的全部内容

    func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)//读取一行,推荐使用ReadBytes('\n') 或 ReadString('\n')的方式以替代  

    func (b *Reader) ReadRune() (r rune, size int, err error)  //读取一个Rune

    func (b *Reader) ReadSlice(delim byte) (line []byte, err error) //读出数据 返回其切片

    func (b *Reader) ReadString(delim byte) (string, error) //读出字符串

    func (b *Reader) Reset(r io.Reader) //丢弃缓存重置状态

    func (b *Reader) UnreadByte() error //撤销最近一次readByte操作

    func (b *Reader) UnreadRune() error //类似上

    func (b *Reader) WriteTo(w io.Writer) (n int64, err error) //reader直接写入一个Writer


   Writer

    func NewWriter(w io.Writer) *Writer

    func NewWriterSize(w io.Writer, size int) *Writer

    func (b *Writer) Available() int //缓冲区中可用大小

    func (b *Writer) Buffered() int  //缓冲区中未提交的数据的大小

    func (b *Writer) Flush() error   //提交缓冲区中数据

    func (b *Writer) ReadFrom(r io.Reader) (n int64, err error) //从一个reader中读取并写入

    func (b *Writer) Reset(w io.Writer) //丢弃缓存重置状态

    func (b *Writer) Write(p []byte) (nn int, err error)

    func (b *Writer) WriteByte(c byte) error

    func (b *Writer) WriteRune(r rune) (size int, err error)

    func (b *Writer) WriteString(s string) (int, error)



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...