data_reader.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package network
  2. import (
  3. "encoding/binary"
  4. "io"
  5. )
  6. type DataReader struct {
  7. r io.Reader
  8. }
  9. func NewDataReader(r io.Reader) *DataReader {
  10. return &DataReader{r: r}
  11. }
  12. func (reader *DataReader) Byte() (byte, error) {
  13. var b byte
  14. err := binary.Read(reader.r, binary.BigEndian, &b)
  15. if err != nil {
  16. return 0, err
  17. }
  18. return b, nil
  19. }
  20. func (reader *DataReader) Bytes(bytesLen int) ([]byte, error) {
  21. bs := make([]byte, bytesLen)
  22. err := binary.Read(reader.r, binary.BigEndian, bs)
  23. if err != nil {
  24. return nil, err
  25. }
  26. return bs, nil
  27. }
  28. func (reader *DataReader) Uint8() (uint8, error) {
  29. var u uint8
  30. err := binary.Read(reader.r, binary.BigEndian, &u)
  31. if err != nil {
  32. return 0, err
  33. }
  34. return u, nil
  35. }
  36. func (reader *DataReader) Uint16() (uint16, error) {
  37. var u uint16
  38. err := binary.Read(reader.r, binary.BigEndian, &u)
  39. if err != nil {
  40. return 0, err
  41. }
  42. return u, nil
  43. }
  44. func (reader *DataReader) Uint32() (uint32, error) {
  45. var u uint32
  46. err := binary.Read(reader.r, binary.BigEndian, &u)
  47. if err != nil {
  48. return 0, err
  49. }
  50. return u, nil
  51. }
  52. func (reader *DataReader) Uint64() (uint64, error) {
  53. var u uint64
  54. err := binary.Read(reader.r, binary.BigEndian, &u)
  55. if err != nil {
  56. return 0, err
  57. }
  58. return u, nil
  59. }
  60. func (reader *DataReader) String(bytesLen int) (string, error) {
  61. retBytes := make([]byte, bytesLen)
  62. err := binary.Read(reader.r, binary.BigEndian, retBytes)
  63. if err != nil {
  64. return "", err
  65. }
  66. return string(retBytes), nil
  67. }