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