You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

binary.go 2.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package io
  2. import (
  3. "bufio"
  4. "encoding/binary"
  5. "io"
  6. )
  7. func WriteUint8Field(writer *bufio.Writer, data uint8) error {
  8. if err := writer.WriteByte(data); err != nil {
  9. return err
  10. }
  11. return nil
  12. }
  13. func ReadUint8Field(reader *bufio.Reader) (uint8, error) {
  14. data, err := reader.ReadByte()
  15. if err != nil {
  16. return 0, err
  17. }
  18. return data, nil
  19. }
  20. func WriteUint16Field(writer *bufio.Writer, data uint16) error {
  21. dataBytes := make([]byte, 2)
  22. binary.LittleEndian.PutUint16(dataBytes, data)
  23. err := WriteAll(writer, dataBytes)
  24. if err != nil {
  25. return err
  26. }
  27. return nil
  28. }
  29. func ReadUint16Field(reader *bufio.Reader) (uint16, error) {
  30. dataBytes := make([]byte, 2)
  31. _, err := io.ReadFull(reader, dataBytes)
  32. if err != nil {
  33. return 0, err
  34. }
  35. return binary.LittleEndian.Uint16(dataBytes), nil
  36. }
  37. func WriteUint32Field(writer *bufio.Writer, data uint32) error {
  38. dataBytes := make([]byte, 4)
  39. binary.LittleEndian.PutUint32(dataBytes, data)
  40. err := WriteAll(writer, dataBytes)
  41. if err != nil {
  42. return err
  43. }
  44. return nil
  45. }
  46. func ReadUint32Field(reader *bufio.Reader) (uint32, error) {
  47. dataBytes := make([]byte, 4)
  48. _, err := io.ReadFull(reader, dataBytes)
  49. if err != nil {
  50. return 0, err
  51. }
  52. return binary.LittleEndian.Uint32(dataBytes), nil
  53. }
  54. func WriteUint64Field(writer *bufio.Writer, data uint64) error {
  55. dataBytes := make([]byte, 8)
  56. binary.LittleEndian.PutUint64(dataBytes, data)
  57. err := WriteAll(writer, dataBytes)
  58. if err != nil {
  59. return err
  60. }
  61. return nil
  62. }
  63. func ReadUint64Field(reader *bufio.Reader) (uint64, error) {
  64. dataBytes := make([]byte, 8)
  65. _, err := io.ReadFull(reader, dataBytes)
  66. if err != nil {
  67. return 0, err
  68. }
  69. return binary.LittleEndian.Uint64(dataBytes), nil
  70. }
  71. func WriteStringField(writer *bufio.Writer, data string) error {
  72. dataBytes := []byte(data)
  73. if err := writer.WriteByte(byte(len(dataBytes))); err != nil {
  74. return err
  75. }
  76. err := WriteAll(writer, dataBytes)
  77. if err != nil {
  78. return err
  79. }
  80. return nil
  81. }
  82. func ReadStringField(reader *bufio.Reader) (string, error) {
  83. length, err := reader.ReadByte()
  84. if err != nil {
  85. return "", err
  86. }
  87. dataBytes := make([]byte, length)
  88. _, err = io.ReadFull(reader, dataBytes)
  89. if err != nil {
  90. return "", err
  91. }
  92. return string(dataBytes), nil
  93. }