refine buffer interface

This commit is contained in:
Darien Raymond
2018-07-30 22:45:06 +02:00
parent a4030dd237
commit 206f52affc
14 changed files with 42 additions and 58 deletions
+5 -22
View File
@@ -21,26 +21,6 @@ func ReadAllToMultiBuffer(reader io.Reader) (MultiBuffer, error) {
return mb, nil
}
// ReadSizeToMultiBuffer reads specific number of bytes from reader into a MultiBuffer.
func ReadSizeToMultiBuffer(reader io.Reader, size int32) (MultiBuffer, error) {
mb := NewMultiBufferCap(32)
for size > 0 {
bSize := size
if bSize > Size {
bSize = Size
}
b := NewSize(bSize)
if err := b.Reset(ReadFullFrom(reader, bSize)); err != nil {
mb.Release()
return nil, err
}
size -= bSize
mb.Append(b)
}
return mb, nil
}
// ReadAllToBytes reads all content from the reader into a byte array, until EOF.
func ReadAllToBytes(reader io.Reader) ([]byte, error) {
mb, err := ReadAllToMultiBuffer(reader)
@@ -100,7 +80,7 @@ func (mb *MultiBuffer) ReadFrom(reader io.Reader) (int64, error) {
for {
b := New()
err := b.Reset(ReadFrom(reader))
err := b.Reset(ReadFullFrom(reader, Size))
if b.IsEmpty() {
b.Release()
} else {
@@ -108,7 +88,7 @@ func (mb *MultiBuffer) ReadFrom(reader io.Reader) (int64, error) {
}
totalBytes += int64(b.Len())
if err != nil {
if errors.Cause(err) == io.EOF {
if errors.Cause(err) == io.EOF || errors.Cause(err) == io.ErrUnexpectedEOF {
return totalBytes, nil
}
return totalBytes, err
@@ -178,6 +158,9 @@ func (mb *MultiBuffer) Write(b []byte) (int, error) {
// WriteMultiBuffer implements Writer.
func (mb *MultiBuffer) WriteMultiBuffer(b MultiBuffer) error {
*mb = append(*mb, b...)
for i := range b {
b[i] = nil
}
return nil
}