国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

淺談GoLang幾種讀文件方式的比較

2020-04-01 18:50:26
字體:
來源:轉載
供稿:網友

GoLang提供了很多讀文件的方式,一般來說常用的有三種。使用Read加上buffer,使用bufio庫和ioutil 庫。

那他們的效率如何呢?用一個簡單的程序來評測一下:

package main  import(   "fmt"   "os"   "flag"   "io"   "io/ioutil"   "bufio"   "time" )  func read1(path string)string{   fi,err := os.Open(path)   if err != nil{     panic(err)   }   defer fi.Close()    chunks := make([]byte,1024,1024)   buf := make([]byte,1024)   for{     n,err := fi.Read(buf)     if err != nil && err != io.EOF{panic(err)}     if 0 ==n {break}     chunks=append(chunks,buf[:n]...)     // fmt.Println(string(buf[:n]))   }   return string(chunks) }  func read2(path string)string{   fi,err := os.Open(path)   if err != nil{panic(err)}   defer fi.Close()   r := bufio.NewReader(fi)      chunks := make([]byte,1024,1024)       buf := make([]byte,1024)   for{     n,err := r.Read(buf)     if err != nil && err != io.EOF{panic(err)}     if 0 ==n {break}     chunks=append(chunks,buf[:n]...)     // fmt.Println(string(buf[:n]))   }   return string(chunks) }  func read3(path string)string{   fi,err := os.Open(path)   if err != nil{panic(err)}   defer fi.Close()   fd,err := ioutil.ReadAll(fi)   // fmt.Println(string(fd))   return string(fd) }  func main(){      flag.Parse()   file := flag.Arg(0)   f,err := ioutil.ReadFile(file)   if err != nil{     fmt.Printf("%s/n",err)     panic(err)   }   fmt.Println(string(f))   start := time.Now()   read1(file)   t1 := time.Now()   fmt.Printf("Cost time %v/n",t1.Sub(start))   read2(file)   t2 := time.Now()   fmt.Printf("Cost time %v/n",t2.Sub(t1))   read3(file)   t3 := time.Now()   fmt.Printf("Cost time %v/n",t3.Sub(t2))  } 

運行命令go run read.go filename, 制定需要讀取的文件就可以了。這里我比較了讀取13.7MB的日志文件,三種方式分別消耗的時間是:

Cost time 105.006ms Cost time 68.0039ms Cost time 31.0018ms 

讀取29.3MB的媒體文件:

Cost time 390.0223ms Cost time 194.0111ms Cost time 83.0048ms 

讀取302MB的媒體文件

Cost time 40.8043338s Cost time 1m5.0407201s Cost time 8.8155043s 

這個差距就很明顯了,ioutil提供的方法效率就是高。有空可以再從代碼層面再去分析一下。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶关市| 清远市| 克东县| 兴国县| 东兴市| 深泽县| 七台河市| 浮山县| 凤冈县| 特克斯县| 涪陵区| 白朗县| 同仁县| 苍溪县| 中西区| 万年县| 吉林市| 藁城市| 都安| 绥宁县| 邻水| 东乌珠穆沁旗| 武汉市| 沅江市| 满洲里市| 荃湾区| 定襄县| 昌黎县| 和政县| 明星| 安泽县| 台北市| 钦州市| 安福县| 贵港市| 伊宁县| 武宁县| 凤冈县| 凤冈县| 遂溪县| 泸定县|