92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package store
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"hpds_annotation/pkg/utils"
|
|
"io"
|
|
"os"
|
|
"path"
|
|
|
|
"github.com/klauspost/compress/zstd"
|
|
)
|
|
|
|
func Load(storePath string) map[string]bool {
|
|
if !utils.PathExists(storePath) {
|
|
_ = os.MkdirAll(storePath, os.ModePerm)
|
|
}
|
|
fileName := "store"
|
|
storeFile := path.Join(storePath, fmt.Sprintf("%s.hdb", fileName))
|
|
if !utils.PathExists(storeFile) {
|
|
NewFile(storeFile)
|
|
return make(map[string]bool)
|
|
}
|
|
list := make(map[string]bool)
|
|
f, _ := os.OpenFile(storeFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
|
defer func(f *os.File) {
|
|
_ = f.Close()
|
|
}(f)
|
|
buff, err := io.ReadAll(f)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return nil
|
|
}
|
|
if len(buff) > 0 {
|
|
str, err := UnCompress(buff)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
err = json.Unmarshal(str, &list)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
}
|
|
return list
|
|
}
|
|
|
|
func Save(storePath string, list map[string]bool) {
|
|
if !utils.PathExists(storePath) {
|
|
_ = os.MkdirAll(storePath, os.ModePerm)
|
|
}
|
|
fileName := "store"
|
|
storeFile := path.Join(storePath, fmt.Sprintf("%s.hdb", fileName))
|
|
if !utils.PathExists(storeFile) {
|
|
NewFile(storeFile)
|
|
}
|
|
f, _ := os.OpenFile(storeFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
|
defer func() {
|
|
_ = f.Close()
|
|
}()
|
|
str, _ := json.Marshal(list)
|
|
c := Compress(str)
|
|
_, _ = f.Write(c)
|
|
}
|
|
func NewFile(fileName string) {
|
|
f, _ := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
|
|
defer func(f *os.File) {
|
|
_ = f.Close()
|
|
}(f)
|
|
}
|
|
|
|
// Compress 压缩
|
|
func Compress(src []byte) []byte {
|
|
encoder, _ := zstd.NewWriter(nil)
|
|
zstd.WithEncoderConcurrency(3)
|
|
return encoder.EncodeAll(src, make([]byte, 0, len(src)))
|
|
}
|
|
|
|
func UnCompress(src []byte) ([]byte, error) {
|
|
d, err := zstd.NewReader(nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer d.Close()
|
|
|
|
uncompressed, err := d.DecodeAll(src, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return uncompressed, nil
|
|
}
|