Documentation ¶
Overview ¶
BuffReader is a Go package that implements thread safe and dynamically resized buffer for io.Reader. BuffReader increases data transfer performance between reader and writer. It makes sure that reader (e.g. network connection) never waits slow writer (e.g. slow data processing) by buffering received data in to memory.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrClosedBuffReader = errors.New("BuffReader is closed")
Functions ¶
This section is empty.
Types ¶
type BuffReader ¶
type BuffReader struct {
// contains filtered or unexported fields
}
func New ¶
func New(src io.Reader) *BuffReader
New function creates new BuffReader src - reader that will be red and data will be stored in to the internal buffer.
func (*BuffReader) Buff ¶
func (br *BuffReader) Buff() <-chan BuffRes
Buff method starts buffering in subroutine (non-blocking). Returns channel that will return buffering result when buffering is finished. Method starts buffering only the first time it is called, so can be used to get channel multiple times. If method is called after buffering is done or Close() is called it returns closed channel.
<-chan BuffRes - returns result of reading from input reader src size - is the number of bytes that were red from input reader. err - error that occurred during reading from input reader and writing to internal buffer. Err values: * there was no error err == nil * is closed err == ErrClosedBuffReader * unable to allocate memory for the buffer err == bytes.ErrTooLarge
func (*BuffReader) Close ¶
func (br *BuffReader) Close() (err error)
Close stops loading buffer and releasing memory. Source reader stays open. Returns ErrClosedBuffReader error if Close() is called more than once.
Notes ¶
Bugs ¶
If BuffReader is closed while waiting on reading source io.Reader buffering subroutine will not exit. To avoid hanging subroutine close source io.Reader.