Files
srdb/manifest/manifest_reader.go

49 lines
800 B
Go
Raw Normal View History

package manifest
import (
"encoding/binary"
"io"
)
// Reader MANIFEST 读取器
type Reader struct {
file io.Reader
}
// NewReader 创建 MANIFEST 读取器
func NewReader(file io.Reader) *Reader {
return &Reader{
file: file,
}
}
// ReadEdit 读取版本变更
func (r *Reader) ReadEdit() (*VersionEdit, error) {
// 读取 CRC32 和 Length
header := make([]byte, 8)
_, err := io.ReadFull(r.file, header)
if err != nil {
return nil, err
}
// 读取长度
length := binary.LittleEndian.Uint32(header[4:8])
// 读取数据
data := make([]byte, 8+length)
copy(data[0:8], header)
_, err = io.ReadFull(r.file, data[8:])
if err != nil {
return nil, err
}
// 解码
edit := NewVersionEdit()
err = edit.Decode(data)
if err != nil {
return nil, err
}
return edit, nil
}