Skip to content

Commit a04a2a1

Browse files
authored
Merge pull request #42 from nirs/fix-read-example
Fix read example use io.CopyBuffer
2 parents 94ebcca + 9fef7ca commit a04a2a1

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

cmd/go-qcow2reader-example/read.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func cmdRead(args []string) error {
2929
flag.PrintDefaults()
3030
}
3131
fs.BoolVar(&debug, "debug", false, "enable printing debug messages")
32-
fs.IntVar(&bufferSize, "buffer-size", 65536, "buffer size")
32+
fs.IntVar(&bufferSize, "buffer-size", 2*1024*1024, "buffer size")
3333
fs.Int64Var(&offset, "offset", 0, "offset to read")
3434
fs.Int64Var(&length, "length", -1, "length to read")
3535
if err := fs.Parse(args); err != nil {
@@ -67,7 +67,20 @@ func cmdRead(args []string) error {
6767

6868
buf := make([]byte, bufferSize)
6969
sr := io.NewSectionReader(img, offset, length)
70-
_, err = io.CopyBuffer(os.Stdout, sr, buf)
70+
w := &hideReadFrom{os.Stdout}
71+
72+
_, err = io.CopyBuffer(w, sr, buf)
7173

7274
return err
7375
}
76+
77+
// hideReadFrom hides os.File ReadFrom method to ensure that io.CopyBuffer()
78+
// will use our buffer, speeding up the copy significantly. For more info see
79+
// https://github.com/lima-vm/go-qcow2reader/pull/42.
80+
type hideReadFrom struct {
81+
f *os.File
82+
}
83+
84+
func (w *hideReadFrom) Write(p []byte) (int, error) {
85+
return w.f.Write(p)
86+
}

0 commit comments

Comments
 (0)