Add buffered reader

This commit is contained in:
9seconds
2018-07-03 10:10:00 +03:00
parent 5f54a235d2
commit 586ffab01b
4 changed files with 100 additions and 114 deletions
+38
View File
@@ -0,0 +1,38 @@
package wrappers
import "bytes"
type BufferedReader struct {
Buffer *bytes.Buffer
}
func (b *BufferedReader) BufferedRead(p []byte, callback func() error) (int, error) {
if b.Buffer.Len() > 0 {
return b.flush(p)
}
if err := callback(); err != nil {
return 0, err
}
return b.flush(p)
}
func (b *BufferedReader) flush(p []byte) (int, error) {
sizeToRead := len(p)
if b.Buffer.Len() < sizeToRead {
sizeToRead = b.Buffer.Len()
}
data := b.Buffer.Bytes()
copy(p, data[:sizeToRead])
if sizeToRead == b.Buffer.Len() {
b.Buffer.Reset()
} else {
b.Buffer = bytes.NewBuffer(data[sizeToRead:])
}
return sizeToRead, nil
}
func NewBufferedReader() BufferedReader {
return BufferedReader{Buffer: &bytes.Buffer{}}
}