gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/codec/protorpc/netstring.go (about) 1 package protorpc 2 3 import ( 4 "encoding/binary" 5 "io" 6 ) 7 8 // WriteNetString writes data to a big-endian netstring on a Writer. 9 // Size is always a 32-bit unsigned int. 10 func WriteNetString(w io.Writer, data []byte) (written int, err error) { 11 size := make([]byte, 4) 12 binary.BigEndian.PutUint32(size, uint32(len(data))) 13 if written, err = w.Write(size); err != nil { 14 return 15 } 16 return w.Write(data) 17 } 18 19 // ReadNetString reads data from a big-endian netstring. 20 func ReadNetString(r io.Reader) (data []byte, err error) { 21 sizeBuf := make([]byte, 4) 22 _, err = r.Read(sizeBuf) 23 if err != nil { 24 return nil, err 25 } 26 size := binary.BigEndian.Uint32(sizeBuf) 27 if size == 0 { 28 return nil, nil 29 } 30 data = make([]byte, size) 31 _, err = r.Read(data) 32 if err != nil { 33 return nil, err 34 } 35 return 36 }