好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 淺談GoLang幾種讀文件方式的比較

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

熱門標簽:廣州呼叫中心外呼系統 中國地圖標注省會高清 地圖標注的汽車標 高德地圖標注口訣 西部云谷一期地圖標注 南通如皋申請開通400電話 學海導航地圖標注 江西轉化率高的羿智云外呼系統 浙江高速公路地圖標注

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提供的方法效率就是高。有空可以再從代碼層面再去分析一下。

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

您可能感興趣的文章:
  • 詳解Golang編程中的常量與變量
  • Golang學習筆記(二):類型、變量、常量
  • GO語言中的常量
  • Go語言中常量定義方法實例分析
  • Go系列教程之反射的用法
  • GOLANG使用Context實現傳值、超時和取消的方法
  • GOLANG使用Context管理關聯goroutine的方法
  • Go并發調用的超時處理的方法
  • Go routine調度詳解
  • Golang常量iota的使用實例

標簽:曲靖 東營 常州 許昌 吐魯番 保定 貴州 德宏

巨人網絡通訊聲明:本文標題《淺談GoLang幾種讀文件方式的比較》,本文關鍵詞  淺談,GoLang,幾種,讀,文件,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談GoLang幾種讀文件方式的比較》相關的同類信息!
  • 本頁收集關于淺談GoLang幾種讀文件方式的比較的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 我丰满的岳?愉情无遮挡| 国产永久免费草莓网视频| 国产日韩电影| 3D动漫????videos| 欧美ab片| 亚洲欧洲国产精品久久| 欧美另类videos高清精品| 99久久婷婷国产亚洲终合精品| 91久久精品日日躁夜夜躁国产 | 风月俏佳人完整版免费观看在线| 美女露出全部隐私| a级日韩乱理伦片在线观看| 亚洲国产第一站精品蜜芽| 精品日韩在线视频| 国产欧美日本| 西西GOGO大尺度人体模特写真| 亚州午夜性视频| 男男基情视频| 磴口县| 骚虎视频在线免费观看| 做暧小视频xo免费观看完整版| 91丨九色丨高潮丰满日本丝袜| 台湾果冻传媒国产今日推荐| 鲁啊鲁视频在线精品| 日本激情小视频| 飘雪在线观看免费高清完整版韩国| 岛国黑人精品视频在线网| 超h大尺度成人漫画免费| 欧美同性videos可播| 舌头伸进去?的我的B看看| 国产做受???网站| 午夜初女破初的视频| gay亚洲国产男同china| 国产精品久久久久久久成人午夜| 四川一级少妇A片免费| 天天搡天天狠天干天啪啪| 内衣办公室无删减| 美女扒开粉嫩尿口照片| 亚洲精品国产精品国自产观看| 欧美天天澡天天爽日日a| 晨勃坐进去h男男|