utils/synclog/meta_data.go (44 lines of code) (raw):

package synclog import ( "bytes" "encoding/binary" "errors" "io" ) const ( Meta_Head = "SYNCLOG" ) type MetaData struct { //headSize uint8 Version uint8 Offset uint32 Head string } func NewMetaData() *MetaData { return &MetaData{ Head: Meta_Head, Version: 1, Offset: 0, } } func (m *MetaData) MetaSize() int { return len(m.Head) + 1 + 4 } func (m *MetaData) ToBytes() []byte { buf := bytes.NewBufferString(m.Head) binary.Write(buf, binary.LittleEndian, m.Version) binary.Write(buf, binary.LittleEndian, m.Offset) return buf.Bytes() } func (m *MetaData) FromBytes(reader io.Reader) error { head := make([]byte, len(Meta_Head)) if _, err := reader.Read(head); err != nil { return err } if string(head) != Meta_Head { return errors.New("head string is not match") } m.Head = string(head) binary.Read(reader, binary.LittleEndian, &m.Version) binary.Read(reader, binary.LittleEndian, &m.Offset) //m.headSize = uint8(len(m.Head) + 1 + 4) return nil }