|  | @@ -16,8 +16,22 @@ type BufferToBytesWriter struct {
 | 
	
		
			
				|  |  |  func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error {
 | 
	
		
			
				|  |  |  	defer mb.Release()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	size := mb.Len()
 | 
	
		
			
				|  |  | +	if size == 0 {
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	bs := mb.ToNetBuffers()
 | 
	
		
			
				|  |  | -	return common.Error2(bs.WriteTo(w.Writer))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for size > 0 {
 | 
	
		
			
				|  |  | +		n, err := bs.WriteTo(w.Writer)
 | 
	
		
			
				|  |  | +		if err != nil {
 | 
	
		
			
				|  |  | +			return err
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		size -= int32(n)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // ReadFrom implements io.ReaderFrom.
 | 
	
	
		
			
				|  | @@ -105,23 +119,28 @@ func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // Flush flushes buffered content into underlying writer.
 | 
	
		
			
				|  |  |  func (w *BufferedWriter) Flush() error {
 | 
	
		
			
				|  |  | -	if !w.buffer.IsEmpty() {
 | 
	
		
			
				|  |  | -		b := w.buffer
 | 
	
		
			
				|  |  | -		w.buffer = nil
 | 
	
		
			
				|  |  | +	if w.buffer.IsEmpty() {
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if writer, ok := w.writer.(io.Writer); ok {
 | 
	
		
			
				|  |  | -			_, err := writer.Write(b.Bytes())
 | 
	
		
			
				|  |  | -			b.Release()
 | 
	
		
			
				|  |  | +	b := w.buffer
 | 
	
		
			
				|  |  | +	w.buffer = nil
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if writer, ok := w.writer.(io.Writer); ok {
 | 
	
		
			
				|  |  | +		defer b.Release()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		for !b.IsEmpty() {
 | 
	
		
			
				|  |  | +			n, err := writer.Write(b.Bytes())
 | 
	
		
			
				|  |  |  			if err != nil {
 | 
	
		
			
				|  |  |  				return err
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -		} else if err := w.writer.WriteMultiBuffer(NewMultiBufferValue(b)); err != nil {
 | 
	
		
			
				|  |  | -			return err
 | 
	
		
			
				|  |  | +			b.Advance(int32(n))
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		w.buffer = nil
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	return nil
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return w.writer.WriteMultiBuffer(NewMultiBufferValue(b))
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // SetBuffered sets whether the internal buffer is used. If set to false, Flush() will be called to clear the buffer.
 |