bytes.go 678 B

1234567891011121314151617181920212223242526272829303132
  1. package mux
  2. import (
  3. "bytes"
  4. "encoding/binary"
  5. "io"
  6. )
  7. //write bytes with int32 length
  8. func WriteLenBytes(buf []byte, w io.Writer) (int, error) {
  9. raw := bytes.NewBuffer([]byte{})
  10. if err := binary.Write(raw, binary.LittleEndian, int32(len(buf))); err != nil {
  11. return 0, err
  12. }
  13. if err := binary.Write(raw, binary.LittleEndian, buf); err != nil {
  14. return 0, err
  15. }
  16. return w.Write(raw.Bytes())
  17. }
  18. //read bytes by length
  19. func ReadLenBytes(buf []byte, r io.Reader) (int, error) {
  20. var l uint32
  21. var err error
  22. if binary.Read(r, binary.LittleEndian, &l) != nil {
  23. return 0, err
  24. }
  25. if _, err = io.ReadFull(r, buf[:l]); err != nil {
  26. return 0, err
  27. }
  28. return int(l), nil
  29. }