package network import ( "encoding/binary" "io" ) type DataReader struct { r io.Reader } func NewDataReader(r io.Reader) *DataReader { return &DataReader{r: r} } func (reader *DataReader) Byte() (byte, error) { var b byte err := binary.Read(reader.r, binary.BigEndian, &b) if err != nil { return 0, err } return b, nil } func (reader *DataReader) Bytes(bytesLen int) ([]byte, error) { bs := make([]byte, bytesLen) err := binary.Read(reader.r, binary.BigEndian, bs) if err != nil { return nil, err } return bs, nil } func (reader *DataReader) Uint8() (uint8, error) { var u uint8 err := binary.Read(reader.r, binary.BigEndian, &u) if err != nil { return 0, err } return u, nil } func (reader *DataReader) Uint16() (uint16, error) { var u uint16 err := binary.Read(reader.r, binary.BigEndian, &u) if err != nil { return 0, err } return u, nil } func (reader *DataReader) Uint32() (uint32, error) { var u uint32 err := binary.Read(reader.r, binary.BigEndian, &u) if err != nil { return 0, err } return u, nil } func (reader *DataReader) Uint64() (uint64, error) { var u uint64 err := binary.Read(reader.r, binary.BigEndian, &u) if err != nil { return 0, err } return u, nil } func (reader *DataReader) String(bytesLen int) (string, error) { retBytes := make([]byte, bytesLen) err := binary.Read(reader.r, binary.BigEndian, retBytes) if err != nil { return "", err } return string(retBytes), nil }