golang读取文件

万大宝_我兜里有糖 · · 1126 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

4种读文件方式

package main

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

func read0(path string) string {
    f, err := ioutil.ReadFile(path)
    if err != nil {
        fmt.Printf("%s\n", err)
        panic(err)
    }
    return string(f)
}

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]...)
    }
    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]...)
    }
    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)
    return string(fd)
}

func main() {
    file := "/Applications/XAMPP/www/golang/web/src/test.log"
    start := time.Now()

    read1(file)
    t0 := time.Now()
    fmt.Printf("Cost time %v %s\n", t0.Sub(start), "os读")

    read2(file)
    t1 := time.Now()
    fmt.Printf("Cost time %v %s\n", t1.Sub(t0), "带缓冲io读")

    read0(file)
    t2 := time.Now()
    fmt.Printf("Cost time %v %s\n", t2.Sub(t1), "io读")

    read3(file)
    t3 := time.Now()
    fmt.Printf("Cost time %v %s\n", t3.Sub(t2), "os-io读")

}


文件的字节大小决定哪种方法选用,os方式效率最慢,按照时间复杂度 os-io执行最快,当一个无限读取文件并持续运算时或者大的文件,有缓冲读取是最好的


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:万大宝_我兜里有糖

查看原文:golang读取文件

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1126 次点击  
加入收藏 微博
上一篇:goroutine
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传