You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package buffered_writer
import ( "bytes" "io" )
var _ = io.WriteCloser(&BufferedWriteCloser{})
type BufferedWriteCloser struct { buffer bytes.Buffer bufferLimit int position int64 nextFlushOffset int64 FlushFunc func([]byte, int64) error CloseFunc func() error }
func NewBufferedWriteCloser(bufferLimit int) *BufferedWriteCloser { return &BufferedWriteCloser{ bufferLimit: bufferLimit, } }
func (b *BufferedWriteCloser) Write(p []byte) (n int, err error) {
if b.buffer.Len()+len(p) >= b.bufferLimit { if err := b.FlushFunc(b.buffer.Bytes(), b.nextFlushOffset); err != nil { return 0, err } b.nextFlushOffset += int64(b.buffer.Len()) b.buffer.Reset() }
return b.buffer.Write(p)
}
func (b *BufferedWriteCloser) Close() error { if b.buffer.Len() > 0 { if err := b.FlushFunc(b.buffer.Bytes(), b.nextFlushOffset); err != nil { return err } } if b.CloseFunc != nil { if err := b.CloseFunc(); err != nil { return err } }
return nil }
|