Go语言三种方式读取文件效率对比及原因分析

本文探讨了Go语言中三种文件读取方式的效率对比:os.Open+Read、bufio.Scanner和ioutil.ReadAll。实验结果显示,bufferIO由于使用缓冲区显著优于普通read,而bufio.Scanner和ioutil.ReadAll的效率相近。通过源码分析,解释了bufferIO的性能优势及其与ioutil相近的原因。
摘要由CSDN通过智能技术生成

最近有遇到需要用go读取大文件的情况,顺路研究了一下go几种读取文件方式的效率。

go几种常见的文件io方式

  1. 使用os包内的open和read。

    fi, err := os.Open(path) // 打开文件
    buf := make([]byte, 1024)
    n, err := fi.Read(buf)   // 读取内容
    
  2. 使用buffered io

    fi, err := os.Open(path)
    r := bufio.NewReader(fi)
    buf := make([]byte, 1024)
    n, err := r.Read(buf)
    
  3. 使用ioutil包内的方法

    fi, err := os.Open(path)
    fd, err := ioutil.ReadAll(fi)
    

现象(效率对比)

准备了待读取文件信息如下:

total 720912
-rw-r--r--  1 stephen  staff   2.3K Sep 15 11:59 io_demo.go
-rw-r--r--  1 stephen  staff   336M Sep 15 11:59 test.txt

同时io_demo.go文件中的代码如下:

package main

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"time"
)

func readRaw(path string) string {
   
	start := time.Now()
	fi, err := os.Open(path)
	if err != nil {
   
		panic(err)
	}
	defer fi.Close()
	defer func() {
   
		fi.Close()
		fmt.
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值