Я пытаюсь прочитать архив, который tarred, streaming, для stdin, но я как-то читаю гораздо больше данных в трубе, чем отправляет 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 tarred-папки я получаю 1468 кусков 4MB (это 6.15GB)! Кроме того, не имеет значения, насколько велик массив data []byte
: если я задаю размер блока до 40 МБ, я все равно получаю ~ 1400 кусков 40 МБ данных, что не имеет никакого смысла.
Есть ли что-то, что мне нужно сделать для правильного чтения данных из os.Stdin
с помощью Go?