Skip to content

Commit 4ae1464

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

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
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

pkg/buffer/bytes_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ func TestReader_ReadAt(t *testing.T) {
1313
}
1414
bs := &Reader{}
1515
bs.Append([]byte("github.com"))
16-
bs.Append([]byte("/"))
17-
bs.Append([]byte("OpenList"))
16+
bs.Append([]byte("/OpenList"))
1817
bs.Append([]byte("Team/"))
1918
bs.Append([]byte("OpenList"))
2019
tests := []struct {

0 commit comments

Comments
 (0)