美文网首页golang
Go 读取大文件

Go 读取大文件

作者: 三梦哥 | 来源:发表于2020-05-18 14:38 被阅读0次

    不管是任何语言,读取大文件的时候,不可能直接将GB以上的文件直接读取加载到内存中,因为这对内存的消耗是个很大的问题,因为我们应该采用缓冲区来读写。

    测试文件使用的文件大小为1.35GB的日志文本文件,使用下面两种方式来读取。

    bufio

    Go 标准库中包含了读写的缓冲库,直接使用即可:

    package main
    
    import (
        "bufio"
        "io"
        "log"
        "os"
        "time"
    )
    
    var filePath = `D:\Data\test.txt`
    
    func bufioReader() {
        file, err := os.Open(filePath)
        if err != nil {
            log.Fatalln(err)
            return
        }
        defer file.Close()
        reader := bufio.NewReader(file)
        var line int64
        for {
            _, _, err := reader.ReadLine()
            if err == io.EOF {
                break
            }
            if err != nil {
                log.Fatalln(err)
                break
            }
            line++
        }
        log.Println("Done!The number of all lines is ", line)
    }
    
    func main() {
        start := time.Now()
        bufioReader()
        elapsed := time.Since(start)
        log.Println("Elapsed:", elapsed)
    }
    

    输出结果为:

    2020/05/18 14:27:00 Done!The number of all lines is  8858808
    2020/05/18 14:27:00 Elapsed: 1.5329915s
    

    ioutil

    Go 标准库中包括了io读写的相关工具包,直接开箱即用:

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "log"
        "time"
    )
    
    var filePath = `D:\Data\test.txt`
    
    func ioutilReader() {
        content, err := ioutil.ReadFile(filePath)
        if err != nil {
            log.Fatalln(err)
            return
        }
        fmt.Println(len(content))
    }
    func main() {
        start := time.Now()
        ioutilReader()
        elapsed := time.Since(start)
        log.Println("Elapsed:", elapsed)
    }
    

    输出结果为:

    1452844512
    2020/05/18 14:29:54 Elapsed: 801.8353ms
    

    结果对比

    读取方式 读取耗时
    bufio 1.5329915s
    ioutil.ReadFile 801.8353ms

    测试发现,ioutil.ReadFilebufio读写还要快。

    相关文章

      网友评论

        本文标题:Go 读取大文件

        本文链接:https://www.haomeiwen.com/subject/capuohtx.html