Go圣经-学习笔记入门bufio.Scanner

上一篇 Go圣经-学习笔记入门bufio

下一篇 Go圣经-学习笔记入门bufio.Writer

由bufio.Reader引出的问题

由上篇文章《Go圣经-学习笔记入门bufio》,我们可以知道,bufio.Reader结构体中所有读取数据的方法,都包含了delim分隔符,这个用起来很不方便,所以Google对此在go1.1版本中加入了bufio.Scanner结构体,用于读取数据。

使用DEMO:

func main(){
    scanner:=bufio.NewScanner(
        strings.NewReader("ABCDEFG\nHIJKELM"),
    )
    for scanner.Scan(){
        fmt.Println(scanner.Text()) // scanner.Bytes()
    }
}

理解:对于Scanner.Scan方法,相当于其他语言的迭代器iterator,并把迭代器指向的数据存放到新的缓冲区里。新的缓冲区(token)可以通过scanner.Text()或者scanner.Bytes()获取到。

Scanner.Scan方法默认是以换行符\n,作为分隔符。如果你想指定分隔符,Go语言提供了四种方法,ScanBytes(返回单个字节作为一个 token), ScanLines(返回一行文本), ScanRunes(返回单个 UTF-8 编码的 rune 作为一个 token)和ScanWords(返回通过“空格”分词的单词)。 使用方式:

func main(){
    scanner:=bufio.NewScanner(
        strings.NewReader("ABCDEFG\nHIJKELM"),
    )
    scanner.Split(ScanWords/*四种方式之一,你也可以自定义, 实现SplitFunc方法*/)
    for scanner.Scan(){
        fmt.Println(scanner.Text()) // scanner.Bytes()
    }
}

结论:我们一般在读取数据到缓冲区时,且想要采用分隔符分隔数据流时,我们一般使用bufio.Scanner数据结构,而不使用bufio.Reader

转载于:https://my.oschina.net/u/3287304/blog/1554245

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值