1234567891011121314151617181920212223242526272829303132333435363738 |
- package rpc
- import (
- "bytes"
- "encoding/binary"
- "errors"
- "fmt"
- "io"
- )
- func WriteBytes(w io.Writer, buf []byte) (int, error) {
- out := bytes.NewBuffer(nil)
- if err := binary.Write(out, binary.BigEndian, int64(len(buf))); err != nil {
- return 0, err
- }
- out.Write(buf)
- return w.Write(out.Bytes())
- }
- func ReadBytes(r io.Reader) ([]byte, error) {
- var length int64
- if err := binary.Read(r, binary.BigEndian, &length); err != nil {
- return nil, err
- }
- if length < 0 || length > 10*1024*1024 {
- return nil, fmt.Errorf("invalid length")
- }
- buffer := make([]byte, length)
- n, err := io.ReadFull(r, buffer)
- if err != nil {
- return nil, err
- }
- if int64(n) != length {
- return nil, errors.New("invalid length")
- }
- return buffer, nil
- }
|