GoLang几种读文件方式的比较
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,GoLang提供了很多读文件的方式,一般来说常用的有三种。使用Read加上buffer,使用bufio库和ioutil 库。那他们的效率如何呢?用一个简单的程序来评测一下:package mainim
千家信息网最后更新 2025年02月01日GoLang几种读文件方式的比较
GoLang提供了很多读文件的方式,一般来说常用的有三种。使用Read加上buffer,使用bufio库和ioutil 库。
那他们的效率如何呢?用一个简单的程序来评测一下:
package mainimport( "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提供的方法效率就是高。有空可以再从代码层面再去分析一下。
文件
方式
媒体
媒体文件
效率
明显
一般来说
代码
命令
就是
层面
差距
常用
方法
日志
时间
程序
分析
消耗
评测
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我会软件开发的英语
地理位置 数据库
常州简单的项目管控软件开发平台
击杀图标软件开发
华为hpibm服务器价格表
如何连接局域网服务器打印机
泰州电子网络技术哪个好
公安网络安全 待遇
销售软件开发流程管理
性价比高的重庆联通服务器托管
关于网络安全的随笔
国道数据库技术流视频
电脑有网但是软件连接不上服务器
软件开发能力考试题库
安全教育平台网络安全系列视频
古冶区网络安全
关于网络安全的英语谚语
access数据库软件
软件开发转固件开发
网络技术前沿与探索 教材
一个服务器能放几级域名
考网络安全证书
邵阳麻将游戏软件开发
征途手游怎么转服务器
什么是数据库的安全
支持假面骑士游戏的服务器
随机选一个服务器
濮阳市网络安全办的主任
中心服务器设计
数据库实施方案