go库,文件指纹库,FileFingerPrint

127 阅读2分钟

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