golang bufio实验
Contents
[NOTE] Updated January 1, 0001. This article may have outdated content or subject matter.
Who is he?
好了 开始今天的包
嗯 今天的包的名字是bufio .
他呢 就是证明golang不单单是脚本语言的证据! 他实现了缓冲 I/O 他包含了io.Reader 和 io.Writer 。
How TO?
在用之前当然先要New一下咯。
Like this:
scanner:=bufio.NewScanner(r io.Reader)
这里的r io.Reader是一个io.Reader类型的参数,比如os.Stdin,net.conn啥的 都是可以直接扔进去的。
当然 有io.Reader 怎么能没有io.Writer 说了他们是一对啊(雾
So,Like this:
writer:=bufio.NewWriter(r io.Writer)
同理 这个io.Writer里面也可以扔stdout了
然后就是从缓存中慢慢输出的过程了
就像这样(默认引入了fmt包):
fmt.Fprint(writer,"Hello")
fmt.Fprint(writer,"World")
//At last Flush it!
writer.Flush();
啊呀 ,偏了偏了;
Scanner还没写完诶;
不过其实也大同小异;
也不过是遍历 io.Reader嘛 ;
遍历io.Reader需要用到r.Scan()方法;
来看下Scan方法的原型
func (s *Scanner) Scan() bool
So, Scan方法返回的是boolean值,不加的话 会直接跳过输入(Stdin) 。所以,想要遍历输入的话 一定要加上scanner.Scan()。
所以 我们就来试试呗:
for scanner.Scan(){
fmt.Println(scanner.Text())
}
(s *Scanner).Text()方法就不用说了 就是获取到scanner里面的那一坨,然后把string类型扔回给你;
所以这样就可以实现I/O了(不是脚本哦!)
既然写都写了 那肯定不能忘掉(s *Scanner).Split()咯
Split()好用的地方应该是在可以带一个Split func吧~
比如bufio.ScanWords()就是一个split func (用来分割输入的 逐字咯)
再如bufio.ScanBytes()也是一个split func() (返回字节)
还有bufio.ScanLines()也是一个split func() (返回一行<-带有换行标记的行 返回的行不会带有这些标记 所以可能是空行 可以用来做读到末尾的flag)
(不知不觉就队形了~)
喂 不要忘了 转码输出的我啊 bufio.ScanRune()如是喊道 (他可以返回字符的UTF8字符 万恶的中文字?(大雾))
bufio 的 Type的话好像就剩一个bufio.Reader()没有提起了 然而我都不想提>…< 因为跟Writer的用法实际上差不了多少。
所以 就写到这里吧 有什么不对的地方尽管拍砖 预计下一个net包 明天抵达战场(FLAG高高挂起 被歪果仁评论了 感觉好稀奇 虽然我知道只是。。。。。某个莫名其妙的爬虫或者钓鱼网站看上我了(哭
Author scnace
LastMod 0001-01-01