|
@@ -24,20 +24,14 @@ func readOneUDP(r io.Reader) (*Buffer, error) {
|
|
|
return nil, newError("Reader returns too many empty payloads.")
|
|
return nil, newError("Reader returns too many empty payloads.")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// ReadBuffer reads a Buffer from the given reader, without allocating large buffer in advance.
|
|
|
|
|
|
|
+// ReadBuffer reads a Buffer from the given reader.
|
|
|
func ReadBuffer(r io.Reader) (*Buffer, error) {
|
|
func ReadBuffer(r io.Reader) (*Buffer, error) {
|
|
|
- // Use an one-byte buffer to wait for incoming payload.
|
|
|
|
|
- var firstByte [1]byte
|
|
|
|
|
- nBytes, err := r.Read(firstByte[:])
|
|
|
|
|
|
|
+ b := New()
|
|
|
|
|
+ _, err := b.ReadFrom(r)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
|
|
+ b.Release()
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- b := New()
|
|
|
|
|
- if nBytes > 0 {
|
|
|
|
|
- common.Must(b.WriteByte(firstByte[0]))
|
|
|
|
|
- }
|
|
|
|
|
- b.ReadFrom(r)
|
|
|
|
|
return b, nil
|
|
return b, nil
|
|
|
}
|
|
}
|
|
|
|
|
|