Golang 中的 archive/zip 包详解(二):常用类型

Golang 中的 archive/zip 包用于处理 ZIP 格式的压缩文件,提供了一系列用于创建、读取和解压缩 ZIP 格式文件的函数和类型,使用起来非常方便。

zip.File 类型

定义如下:

复制代码
type File struct {
	FileHeader
	zip          *Reader
	zipr         io.ReaderAt
	headerOffset int64 // includes overall ZIP archive baseOffset
	zip64        bool  // zip64 extended information extra field presence
}

表示一个 ZIP 文件中的单个文件的信息,文件的元数据信息,例如文件名、文件大小、修改时间等包含在 FileHeader 中,有两个重要的方法:

  • func (f *File) DataOffset() (offset int64, err error),返回文件的可能存在的压缩数据相对于 zip 文件起始的偏移量。
  • func (f *File) Open() (rc io.ReadCloser, err error),返回一个 io.ReadCloser 类型的对象,提供读取文件内容的方法。

zip.FileHeader 类型

定义如下:

复制代码
type FileHeader struct {
	Name string
	Comment string
	NonUTF8 bool
	CreatorVersion uint16
	ReaderVersion  uint16
	Flags          uint16
	Method uint16
	Modified time.Time
	ModifiedTime uint16
	ModifiedDate uint16
	CRC32 uint32
	CompressedSize uint32
	UncompressedSize uint32
	CompressedSize64 uint64
	UncompressedSize64 uint64
	Extra         []byte
	ExternalAttrs uint32 // Meaning depends on CreatorVersion
}

包含了文件在ZIP文件中的元数据信息,例如文件名、文件大小、修改时间等。

zip.Writer 类型

定义如下:

复制代码
type Writer struct {
	cw          *countWriter
	dir         []*header
	last        *fileWriter
	closed      bool
	compressors map[uint16]Compressor
	comment     string

	// testHookCloseSizeOffset if non-nil is called with the size
	// of offset of the central directory at Close.
	testHookCloseSizeOffset func(size, offset uint64)
}

实现了一个 zip 文件写入器。

zip.Reader 类型

定义如下:

复制代码
type Reader struct {
	r             io.ReaderAt
	File          []*File
	Comment       string
	decompressors map[uint16]Decompressor

	// Some JAR files are zip files with a prefix that is a bash script.
	// The baseOffset field is the start of the zip file proper.
	baseOffset int64

	// fileList is a list of files sorted by ename,
	// for use by the Open method.
	fileListOnce sync.Once
	fileList     []fileListEntry
}

用于创建新的 ZIP 文件并将文件添加到其中。

zip.ReadCloser 类型

定义如下:

复制代码
type ReadCloser struct {
	f *os.File
	Reader
}

用于读取文件的内容,并在读取完成后关闭文件。

zip.Compressor 类型

定义如下:

复制代码
type Compressor func(w io.Writer) (io.WriteCloser, error)

返回一个用于压缩用途的 io.WriteCloser 类型的对象。

zip.Decompressor 类型

定义如下:

复制代码
type Decompressor func(r io.Reader) io.ReadCloser

返回一个用于解压缩用途的 io.ReadCloser 类型的对象。

相关推荐
金銀銅鐵9 分钟前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
qq_4069810315 分钟前
c++拷贝构造函数
开发语言·c++
爱喝雪碧的可乐40 分钟前
MATLAB
开发语言·算法·matlab
FungLeo1 小时前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
用户360055579001 小时前
Kestrel_VLLM - 34 · 批量 M 行:五个块、两种层型,与「退回去」的两个原语
后端
leo在掘金1 小时前
25.5k Star 的 DeepInfer 怎么扛住3万亿参数
后端·架构
Agent世界2 小时前
cookie 判据会撒谎:CDP 登录态保活的五个实测坑
后端·自动化运维
林小帅2 小时前
【笔记】Prisma v7 + SQLite TS2305 及连锁 TS7006 问题
前端·javascript·后端
王中阳Go2 小时前
你那条三跳链路的单跳超时,是按压测的 p95 定的,还是拍出来的?
人工智能·后端·架构
时光不老杰2 小时前
03 Netty 双通道长连接层
后端