| @@ -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 | |||||
| } | |||||