data_reader.go 720 B

12345678910111213141516171819202122232425262728293031323334
  1. package network
  2. import (
  3. "bytes"
  4. "io"
  5. )
  6. // ReadBigEndianString 大端读取字符串 TODO 考虑改为一个网络字节序得写入和读取器
  7. func ReadBigEndianString(bigEndianBytes []byte) (string, error) {
  8. // 使用bytes.Buffer来模拟一个io.Reader
  9. reader := bytes.NewReader(bigEndianBytes)
  10. // 初始化一个buffer,用于存放读取的字符串
  11. var buffer []byte
  12. // 使用binary.Read以大端模式读取字符串
  13. // 因为字符串可能包含\x00,所以需要读取到\x00为止
  14. for {
  15. b := make([]byte, 1)
  16. _, err := reader.Read(b)
  17. if err != nil && err != io.EOF {
  18. return "", err
  19. }
  20. if b[0] == 0 {
  21. break
  22. }
  23. buffer = append(buffer, b...)
  24. }
  25. return string(buffer), nil
  26. }