|
|
@@ -26,12 +26,14 @@ func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
+// ReadFrom implements io.ReaderFrom.
|
|
|
func (w *BufferToBytesWriter) ReadFrom(reader io.Reader) (int64, error) {
|
|
|
var sc SizeCounter
|
|
|
err := Copy(NewReader(reader), w, CountSize(&sc))
|
|
|
return sc.Size, err
|
|
|
}
|
|
|
|
|
|
+// BufferedWriter is a Writer with internal buffer.
|
|
|
type BufferedWriter struct {
|
|
|
writer Writer
|
|
|
legacyWriter io.Writer
|
|
|
@@ -39,6 +41,7 @@ type BufferedWriter struct {
|
|
|
buffered bool
|
|
|
}
|
|
|
|
|
|
+// NewBufferedWriter creates a new BufferedWriter.
|
|
|
func NewBufferedWriter(writer Writer) *BufferedWriter {
|
|
|
w := &BufferedWriter{
|
|
|
writer: writer,
|
|
|
@@ -51,6 +54,7 @@ func NewBufferedWriter(writer Writer) *BufferedWriter {
|
|
|
return w
|
|
|
}
|
|
|
|
|
|
+// Write implements io.Writer.
|
|
|
func (w *BufferedWriter) Write(b []byte) (int, error) {
|
|
|
if !w.buffered && w.legacyWriter != nil {
|
|
|
return w.legacyWriter.Write(b)
|
|
|
@@ -78,6 +82,7 @@ func (w *BufferedWriter) Write(b []byte) (int, error) {
|
|
|
return totalBytes, nil
|
|
|
}
|
|
|
|
|
|
+// WriteMultiBuffer implements Writer. It takes ownership of the given MultiBuffer.
|
|
|
func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error {
|
|
|
if !w.buffered {
|
|
|
return w.writer.WriteMultiBuffer(b)
|
|
|
@@ -99,6 +104,7 @@ func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// Flush flushes buffered content into underlying writer.
|
|
|
func (w *BufferedWriter) Flush() error {
|
|
|
if !w.buffer.IsEmpty() {
|
|
|
if err := w.writer.WriteMultiBuffer(NewMultiBufferValue(w.buffer)); err != nil {
|