七叶笔记 » golang编程 » 每日一题(go篇) bufio读取文件

每日一题(go篇) bufio读取文件

问题:以下代码输出什么,为什么?欢迎大家在评论区留下自己的想法。

func testwen() {
 fmt.Println(time.Now())
 f,e := os.Open("文章.txt") //文章长度23866
 buf_len, _ := f.Seek(0,  io .SeekEnd) //获得游标长度
 fmt.Println("文件大小:",buf_len)
 f.Seek(0, io.SeekStart) //把游标放到初始位置
 if e !=  nil  {
 fmt.Println(e)
 return
 }
 rd := bufio.NewReader(f)
 b := make([]byte,3000)
 n,e := rd.Read(b)
 fmt.Println("第一次读取:",n)
 //fmt.Println(string(b))
 time.Sleep(1*time.Second)
 b2 := make([]byte,3000)
 n,e = rd.Read(b2)
 fmt.Println("第二次读取:",n)
 time.Sleep(2*time.Second)
 b3 := make([]byte,3000)
 n,e = rd.Read(b3)
 fmt.Println("第三次读取:",n)
 b4 := make([]byte,3000)
 n,e = rd.Read(b4)
 fmt.Println("第四次读取:",n)
 fmt.Println(time.Now())
}
 


知识点: bufio是一个带 缓存 的读取,现版本的go的默认缓存为4096,它会把数据放进缓存中,当缓存中有数据时无论数据是否满足读取长度它都只会读取缓存中的数据,即使数据不足也不会去文件中读取数据进行填充,知道缓存用完,下一次数据被填充到缓存中。

答案:

2019-09-27 09:46:23.4339668 +0800 CST m=+0.001998601

文件大小: 23866

第一次读取: 3000

第二次读取: 1096

第三次读取: 3000

第四次读取: 1096

2019-09-27 09:46:26.4505383 +0800 CST m=+3.018570101

相关文章