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 1.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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.BigEndian.PutUint16(dataBytes, data)
  23. _, err := writer.Write(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.BigEndian.Uint16(dataBytes), nil
  36. }
  37. func WriteUint32Field(writer *bufio.Writer, data uint32) error {
  38. dataBytes := make([]byte, 4)
  39. binary.BigEndian.PutUint32(dataBytes, data)
  40. _, err := writer.Write(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.BigEndian.Uint32(dataBytes), nil
  53. }
  54. func WriteStringField(writer *bufio.Writer, data string) error {
  55. if err := writer.WriteByte(byte(len(data))); err != nil {
  56. return err
  57. }
  58. _, err := writer.WriteString(data)
  59. if err != nil {
  60. return err
  61. }
  62. return nil
  63. }
  64. func ReadStringField(reader *bufio.Reader) (string, error) {
  65. length, err := reader.ReadByte()
  66. if err != nil {
  67. return "", err
  68. }
  69. dataBytes := make([]byte, length)
  70. _, err = io.ReadFull(reader, dataBytes)
  71. if err != nil {
  72. return "", err
  73. }
  74. return string(dataBytes), nil
  75. }