From 4864c567f709f8fe64065d6e49b81147985f416c Mon Sep 17 00:00:00 2001 From: yangsen Date: Tue, 2 Mar 2021 18:36:10 +0800 Subject: [PATCH] create city by byte array --- city.go | 12 ++++++++++++ reader.go | 12 +++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/city.go b/city.go index 9ce0ca4..d97e96b 100644 --- a/city.go +++ b/city.go @@ -71,6 +71,18 @@ func NewCity(name string) (*City, error) { }, nil } +func NewCityWithData(data []byte) (*City, error) { + + r, e := newReaderWithData(data, &CityInfo{}) + if e != nil { + return nil, e + } + + return &City{ + reader: r, + }, nil +} + // Reload the database func (db *City) Reload(name string) error { diff --git a/reader.go b/reader.go index d4838d7..949a97a 100644 --- a/reader.go +++ b/reader.go @@ -67,12 +67,18 @@ func newReader(name string, obj interface{}) (*reader, error) { if err != nil { return nil, ErrReadFull } + return newReaderWithData(body, obj) +} + +func newReaderWithData(data []byte, obj interface{}) (*reader, error) { + + fileSize := len(data) var meta MetaData - metaLength := int(binary.BigEndian.Uint32(body[0:4])) + metaLength := int(binary.BigEndian.Uint32(data[0:4])) if fileSize < (4 + metaLength) { return nil, ErrFileSize } - if err := json.Unmarshal(body[4:4+metaLength], &meta); err != nil { + if err := json.Unmarshal(data[4:4+metaLength], &meta); err != nil { return nil, err } if len(meta.Languages) == 0 || len(meta.Fields) == 0 { @@ -99,7 +105,7 @@ func newReader(name string, obj interface{}) (*reader, error) { meta: meta, refType: dm, - data: body[4+metaLength:], + data: data[4+metaLength:], } if db.v4offset == 0 {