FileFingerPrint
高性能Go文件指纹库,用于生成文件的唯一哈希标识。
特性
- 高性能: 针对单文件计算优化,支持大文件流式处理
- 多算法支持: SHA256、SHA1、MD5、BLAKE2b
- 内存优化: 预分配缓冲区,减少GC压力
- 缓存友好: 内存对齐优化,提升CPU缓存命中率
- 智能处理: 小文件快速路径,大文件分块处理
性能数据
基于Intel Core i5-5257U @ 2.70GHz的基准测试:
- SHA256: ~314 MB/s (大文件)
- BLAKE2b: ~918 MB/s (最快)
- SHA1: ~824 MB/s
- MD5: ~665 MB/s
安装
go get github.com/mirbf/filefingerprint
使用示例
基本用法
package main
import (
"fmt"
"log"
"github.com/mirbf/filefingerprint"
)
func main() {
// 创建SHA256指纹生成器
fp := fingerprint.New(fingerprint.SHA256)
// 计算文件指纹
hash, err := fp.ComputeFile("example.txt")
if err != nil {
log.Fatal(err)
}
fmt.Printf("文件指纹: %s\n", hash)
}
快速工具函数
// 直接计算SHA256
hash, err := fingerprint.ComputeFileSHA256("example.txt")
if err != nil {
log.Fatal(err)
}
// 计算字节数据的SHA256
data := []byte("hello world")
hash = fingerprint.ComputeBytesSHA256(data)
自定义配置
// 使用BLAKE2b算法和128KB缓冲区
fp := fingerprint.New(fingerprint.BLAKE2b, 128*1024)
// 处理流数据
reader := strings.NewReader("stream data")
hash, err := fp.ComputeStream(reader)
API 文档
核心类型
type Algorithm int
const (
SHA256 Algorithm = iota
SHA1
MD5
BLAKE2b
)
type Fingerprinter struct {
// 内部实现
}
主要方法
// 创建新的指纹生成器
func New(alg Algorithm, bufferSize ...int) *Fingerprinter
// 计算文件指纹
func (f *Fingerprinter) ComputeFile(path string) (string, error)
// 计算字节数据指纹
func (f *Fingerprinter) ComputeBytes(data []byte) string
// 计算流数据指纹
func (f *Fingerprinter) ComputeStream(reader io.Reader) (string, error)
// 工具函数
func ComputeFileSHA256(path string) (string, error)
func ComputeBytesSHA256(data []byte) string
性能优化
缓冲区设置
- 默认64KB缓冲区适合大多数场景
- 大文件(>10MB)建议使用128KB-1MB缓冲区
- 小文件(<64KB)自动使用快速路径
算法选择
- BLAKE2b: 最快,现代化设计
- SHA1: 平衡性能和兼容性
- MD5: 最快但安全性较低
- SHA256: 最安全但稍慢
运行示例
# 使用默认SHA256算法
go run examples/example.go /path/to/file
# 指定算法
go run examples/example.go /path/to/file BLAKE2b
# 运行基准测试
go test -bench=. -benchmem
许可证
MIT License