Browse Source

实现包结构

pull/37/head
songjc 1 year ago
parent
commit
a9d8a1e734
1 changed files with 87 additions and 0 deletions
  1. +87
    -0
      utils/io/binary.go

+ 87
- 0
utils/io/binary.go View File

@@ -0,0 +1,87 @@
package io

import (
"bufio"
"encoding/binary"
"io"
)

func WriteUint8Field(writer *bufio.Writer, data uint8) error {
if err := writer.WriteByte(data); err != nil {
return err
}
return nil
}

func ReadUint8Field(reader *bufio.Reader) (uint8, error) {
data, err := reader.ReadByte()
if err != nil {
return 0, err
}
return data, nil
}

func WriteUint16Field(writer *bufio.Writer, data uint16) error {
dataBytes := make([]byte, 2)
binary.BigEndian.PutUint16(dataBytes, data)

_, err := writer.Write(dataBytes)
if err != nil {
return err
}
return nil
}

func ReadUint16Field(reader *bufio.Reader) (uint16, error) {
dataBytes := make([]byte, 2)
_, err := io.ReadFull(reader, dataBytes)
if err != nil {
return 0, err
}
return binary.BigEndian.Uint16(dataBytes), nil
}

func WriteUint32Field(writer *bufio.Writer, data uint32) error {
dataBytes := make([]byte, 4)
binary.BigEndian.PutUint32(dataBytes, data)

_, err := writer.Write(dataBytes)
if err != nil {
return err
}
return nil
}

func ReadUint32Field(reader *bufio.Reader) (uint32, error) {
dataBytes := make([]byte, 4)
_, err := io.ReadFull(reader, dataBytes)
if err != nil {
return 0, err
}
return binary.BigEndian.Uint32(dataBytes), nil
}

func WriteStringField(writer *bufio.Writer, data string) error {
if err := writer.WriteByte(byte(len(data))); err != nil {
return err
}
_, err := writer.WriteString(data)
if err != nil {
return err
}
return nil
}

func ReadStringField(reader *bufio.Reader) (string, error) {
length, err := reader.ReadByte()
if err != nil {
return "", err
}

dataBytes := make([]byte, length)
_, err = io.ReadFull(reader, dataBytes)
if err != nil {
return "", err
}
return string(dataBytes), nil
}

Loading…
Cancel
Save