in binary.go [124:172]
func (d *Decoder) decBinary(flag int32) ([]byte, error) {
var (
err error
tag byte
length int
)
if flag != TAG_READ {
tag = byte(flag)
} else {
tag, err = d.readBufByte()
if err != nil {
return nil, perrors.WithStack(err)
}
}
if tag == BC_NULL {
return []byte(""), nil
}
data := make([]byte, 0, 128)
bufp := gxbytes.AcquireBytes(65536)
defer gxbytes.ReleaseBytes(bufp)
buf := *bufp
for {
length, err = d.getBinaryLength(tag)
if err != nil {
return nil, perrors.WithStack(err)
}
_, err = io.ReadFull(d.reader, buf[:length])
if err != nil {
return nil, perrors.WithStack(err)
}
data = append(data, buf[:length]...)
if tag != BC_BINARY_CHUNK {
break
}
tag, err = d.readBufByte()
if err != nil {
return nil, perrors.WithStack(err)
}
}
return data, nil
}