1234567891011121314151617181920212223242526272829303132333435 |
- package rpc
- import (
- "bufio"
- "bytes"
- "encoding/binary"
- "errors"
- "io"
- )
- func WriteBytes(w io.Writer, buf []byte) (int, error) {
- out := bytes.NewBuffer(nil)
- binary.Write(out, binary.BigEndian, int64(len(buf)))
- out.Write(buf)
- return w.Write(out.Bytes())
- }
- func ReadBytes(r io.Reader) ([]byte, error) {
- // To compatible with UDP connection, use bufio reader here to avoid lost conent.
- rd := bufio.NewReader(r)
- var length int64
- if err := binary.Read(rd, binary.BigEndian, &length); err != nil {
- return nil, err
- }
- buffer := make([]byte, length)
- n, err := io.ReadFull(rd, buffer)
- if err != nil {
- return nil, err
- }
- if int64(n) != length {
- return nil, errors.New("invalid length")
- }
- return buffer, nil
- }
|