SwiftFoundationCompression

简介

这个软件包封装了zlib中可用的文件和数据压缩行为,并使用Swift封装器编写,以便与Foundation模块自然配合。 没有UnsafePointer,没有文件描述符,没有String路径。 此行为在3个级别可用:

状态

已经实现了基本的.zip文件打开,读取和解压。 尚未实现优化的文件写入。

已经实现了.gzip读取。

数据

使用.compressed(using:progress:)(或.decompressed(using:progress:))压缩或解压缩Data,可以选择使用.gzip而不是.deflate

使用.deflate压缩Data不会生成标头,并且解压缩在标头之后的流上起作用。 使用gzip压缩Data会生成标头,适合进行包装,并且在解压缩时需要包装器。

FileManager

要解压缩许多现有文件,请使用FileManager

func decompress(item:, with:, into:progress:)

它打开一个压缩文件,并将其内容扩展到提供的目录中。

磁盘上压缩/内存中的文件/文件夹

对于以压缩形式存在于磁盘上,但在RAM中结构化的文件/文件夹的文件格式,类似于“压缩”FileWrapper的东西会很好。 FileWrapper存在一个设计问题:目录和常规文件都是同一个类,这意味着API没有强制编译。 使用SwiftPatterns模块中的SerializedResourceWrapping协议,此模块引入了ZipDirectoryWrapping类,该类符合SubResourceWrapping协议。 您可以像浏览目录FileWrapper一样浏览它,但是各个文件(符合DataWrapping)直到您访问它们的.contents属性(对于.zip文件)才会被解压缩。

优化

Data方法以页面大小的组访问数据,以减少脏内存占用,但未对输出数据进行优化。 您应该只将其用于您知道在内存中有用的数据。

尚未实现:FileManager方法利用Data的页面大小映射和FileHandles进行写入,就像它是流一样。

贡献

压缩有很多方面。 如果您想贡献,请 fork 它,编写它,并发出 PR。

以下是一些非目标