我试图读取一个归档文件,该归档文件正在被压缩、流式传输到stdin,但不知何故,我在管道中读取的数据比tar发送的数据多far个.
我像这样运行命令:
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)
}
对于一个data []byte
MB的柏油文件夹,我将得到1468个4MB的块(6.15 GB)!此外,data []byte
个数组的大小似乎并不重要:如果我将块大小设置为40MB,我仍然可以获得大约1400个40MB的数据块,这完全没有意义.
我需要做些什么才能用Go正确读取os.Stdin
的数据吗?