mirror of
https://github.com/v2fly/v2ray-core.git
synced 2026-07-31 12:10:59 -04:00
refine buffer interface
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user