Help us shape the future of Go! Take the 2026 Go Developer Survey

core

package
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Package core 提供 OFD ZIP 包的索引、读取和安全访问能力。

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrReadLimitExceeded 表示读取的解压后内容超过了大小限制。
	ErrReadLimitExceeded = errors.New("读取内容超过大小限制")
	// ErrPackageClosed 表示 ZIP 包已经关闭。
	ErrPackageClosed = errors.New("ZIP 包已经关闭")
)

Functions

func ValidateEntryName added in v0.1.3

func ValidateEntryName(name string) error

ValidateEntryName 校验 OFD 包条目的相对路径是否安全:非空、不以斜杠开头、 不含反斜杠或 NUL,且清理后保持原样(不含 . 或 .. 片段)。该函数不检查同名重复。

Types

type Entry

type Entry struct {
	// Name 是 ZIP 条目的原始名称。
	Name string
	// Path 是去除开头斜杠后的包内查找路径。
	Path string
	// CompressedSize 是条目的压缩后大小。
	CompressedSize uint64
	// UncompressedSize 是条目的解压后大小。
	UncompressedSize uint64
	// Method 是 ZIP 压缩方法编号。
	Method uint16
	// CRC32 是条目的 CRC-32 校验值。
	CRC32 uint32
	// Modified 是条目的修改时间。
	Modified time.Time
	// Mode 是条目的文件模式。
	Mode fs.FileMode
	// IsDir 表示条目是否为目录。
	IsDir bool
	// contains filtered or unexported fields
}

Entry 描述 OFD ZIP 包中的一个条目。

type Package

type Package struct {
	// contains filtered or unexported fields
}

Package 提供 OFD ZIP 包的条目索引和内容读取能力。

func OpenBytes

func OpenBytes(data []byte) (*Package, error)

OpenBytes 从字节数据打开 OFD ZIP 包。

func OpenFile

func OpenFile(filename string) (*Package, error)

OpenFile 从文件路径打开 OFD ZIP 包。 返回的 Package 使用完毕后应调用 Close。

func OpenReader

func OpenReader(reader io.Reader) (*Package, error)

OpenReader 从读取器中读取全部数据并打开 OFD ZIP 包。 调用方仍负责关闭传入的 reader。

func OpenReaderAt added in v0.1.3

func OpenReaderAt(reader io.ReaderAt, size int64) (*Package, error)

OpenReaderAt 从随机访问读取器打开 OFD ZIP 包,无需把数据整体复制到内存。 size 必须是数据的完整字节长度。调用方仍负责关闭底层 reader。

func (*Package) Close

func (p *Package) Close() error

Close 关闭由 OpenFile 创建的 ZIP 包,并释放其文件句柄。 对 OpenBytes 和 OpenReader 创建的对象,Close 没有额外操作。

func (*Package) Entries

func (p *Package) Entries() []Entry

Entries 返回 ZIP 包条目的元数据快照,顺序与 ZIP 中的条目顺序一致。

func (*Package) Has

func (p *Package) Has(fileName string) bool

Has 判断 ZIP 包中是否存在指定名称的条目。

func (*Package) Lookup

func (p *Package) Lookup(fileName string) (Entry, bool)

Lookup 查找指定名称的 ZIP 条目元数据。 如果多个条目规范化后路径相同,返回 ZIP 中最后出现的条目;全部条目可通过 Entries 获取。

func (*Package) Open

func (p *Package) Open(fileName string) (io.ReadCloser, error)

Open 打开 ZIP 包内的条目,返回解压后的读取器。

func (*Package) OpenEntry

func (p *Package) OpenEntry(entry Entry) (io.ReadCloser, error)

OpenEntry 打开 Entries 返回的指定 ZIP 条目。 与 Open 不同,OpenEntry 不会因条目名称重复而切换到其他条目。

func (*Package) Read

func (p *Package) Read(fileName string) ([]byte, error)

Read 读取 ZIP 包内条目的全部解压后内容。

func (*Package) ReadLimit

func (p *Package) ReadLimit(fileName string, limit int64) ([]byte, error)

ReadLimit 读取 ZIP 包内条目的解压后内容,并限制最大字节数。 limit 为 0 时表示不限制。

func (*Package) ReadXML

func (p *Package) ReadXML(fileName string, target any) error

ReadXML 解析 ZIP 包内的 XML 文件。

func (*Package) ReadXMLLimit

func (p *Package) ReadXMLLimit(fileName string, target any, limit int64) error

ReadXMLLimit 解析 ZIP 包内的 XML 文件,并限制最大字节数。 limit 为 0 时表示不限制。

func (*Package) WalkEntries

func (p *Package) WalkEntries(fn func(Entry) bool) error

WalkEntries 按 ZIP 条目顺序遍历条目元数据。 回调返回 false 时停止遍历;该方法不会创建完整的条目快照或查找索引。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL