Skip to content

Commit 3ecf682

Browse files
committed
fix(buffer): optimize ReadAt method for improved performance
1 parent 1eec47f commit 3ecf682

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

pkg/buffer/bytes.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,25 @@ func (r *Reader) ReadAt(p []byte, off int64) (int, error) {
3434
return 0, io.EOF
3535
}
3636

37-
n, length := 0, int64(0)
37+
n := 0
3838
readFrom := false
3939
for _, buf := range r.bufs {
40-
newLength := length + int64(len(buf))
4140
if readFrom {
42-
w := copy(p[n:], buf)
43-
n += w
44-
} else if off < newLength {
41+
nn := copy(p[n:], buf)
42+
n += nn
43+
if n == len(p) {
44+
return n, nil
45+
}
46+
} else if newOff := off - int64(len(buf)); newOff > 0 {
47+
off = newOff
48+
} else {
49+
nn := copy(p, buf[off:])
50+
if nn == len(p) {
51+
return nn, nil
52+
}
53+
n += nn
4554
readFrom = true
46-
w := copy(p[n:], buf[int(off-length):])
47-
n += w
4855
}
49-
if n == len(p) {
50-
return n, nil
51-
}
52-
length = newLength
5356
}
5457

5558
return n, io.EOF

0 commit comments

Comments
 (0)