12345678910111213141516171819202122232425262728293031323334 |
- package bufioutil
- import (
- "bufio"
- "io"
- )
- type BufferedSeeker struct {
- rs io.ReadSeeker
- br *bufio.Reader
- }
- func NewBufferedSeeker(rs io.ReadSeeker, size int) *BufferedSeeker {
- return &BufferedSeeker{
- rs: rs,
- br: bufio.NewReaderSize(rs, size),
- }
- }
- func (b *BufferedSeeker) Read(p []byte) (int, error) {
- return b.br.Read(p)
- }
- func (b *BufferedSeeker) Seek(offset int64, whence int) (int64, error) {
- if whence == io.SeekCurrent {
- offset -= int64(b.br.Buffered())
- }
- n, err := b.rs.Seek(offset, whence)
- if err != nil {
- return 0, err
- }
- b.br.Reset(b.rs)
- return n, nil
- }
|