Golang read from pipe 读取大量数据

我试图读取就是BEING柏油,流媒体,以标准输入存档,但我不知怎么读远远在管道的数据超过焦油发送。


我像这样运行我的命令:


tar -cf - somefolder | ./my-go-binary

源代码是这样的:


package main


import (

    "bufio"

    "io"

    "log"

    "os"

)


// Read from standard input

func main() {

    reader := bufio.NewReader(os.Stdin)

    // Read all data from stdin, processing subsequent reads as chunks.

    parts := 0

    for {

        parts++

        data := make([]byte, 4<<20) // Read 4MB at a time

        _, err := reader.Read(data)

        if err == io.EOF {

            break

        } else if err != nil {

            log.Fatalf("Problems reading from input: %s", err)

        }

    }

    log.Printf("Total parts processed: %d\n", parts)

}

对于 100MB 的 tarred 文件夹,我得到 1468 个 4MB 的块(即 6.15GB)!此外,data []byte数组有多大似乎并不重要:如果我将块大小设置为 40MB,我仍然会得到大约 1400 个 40MB 的数据块,这完全没有意义。


我需要做什么才能os.Stdin使用 Go 正确读取数据吗?


呼啦一阵风
浏览 161回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go