【发布时间】:2014-11-30 23:37:04
【问题描述】:
我正在尝试读取一个被 tar 化、流式传输到标准输入的存档,但不知何故,我在管道中读取的数据比 tar 发送的数据多得多。
我这样运行我的命令:
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 的 tar 文件夹,我得到了 1468 个 4MB 的块(即 6.15GB)!此外,data []byte 数组有多大似乎并不重要:如果我将块大小设置为 40MB,我仍然会得到大约 1400 个 40MB 数据块,这根本没有意义。
我需要做些什么才能使用 Go 正确读取来自 os.Stdin 的数据吗?
【问题讨论】: