mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 13:10:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			924 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2023 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
 | 
						|
 | 
						|
package shared
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"crypto/md5"
 | 
						|
	"fmt"
 | 
						|
	"sync"
 | 
						|
)
 | 
						|
 | 
						|
var dataMapPrefix = []byte("GOEDGE_DATA_MAP:")
 | 
						|
 | 
						|
// DataMap 二进制数据共享Map
 | 
						|
// 用来减少相同数据占用的空间和内存
 | 
						|
type DataMap struct {
 | 
						|
	Map map[string][]byte
 | 
						|
	locker sync.Mutex
 | 
						|
}
 | 
						|
 | 
						|
// NewDataMap 构建对象
 | 
						|
func NewDataMap() *DataMap {
 | 
						|
	return &DataMap{Map: map[string][]byte{}}
 | 
						|
}
 | 
						|
 | 
						|
// Put 放入数据
 | 
						|
func (this *DataMap) Put(data []byte) (keyData []byte) {
 | 
						|
	this.locker.Lock()
 | 
						|
	defer this.locker.Unlock()
 | 
						|
	var key = string(dataMapPrefix) + fmt.Sprintf("%x", md5.Sum(data))
 | 
						|
	this.Map[key] = data
 | 
						|
	return []byte(key)
 | 
						|
}
 | 
						|
 | 
						|
// Read 读取数据
 | 
						|
func (this *DataMap) Read(key []byte) []byte {
 | 
						|
	this.locker.Lock()
 | 
						|
	defer this.locker.Unlock()
 | 
						|
	if bytes.HasPrefix(key, dataMapPrefix) {
 | 
						|
		return this.Map[string(key)]
 | 
						|
	}
 | 
						|
	return key
 | 
						|
}
 |