DEFLATE(unzip)算法的本机Swift实现

DEFLATE(unzip)算法的本机Swift实现,swift,zlib,swift2,compression,Swift,Zlib,Swift2,Compression,我有一些数据是用DEFLATE算法压缩的,我相信基本上就是说压缩了。我正在编写一个swift应用程序,我很想知道是否有解压算法的原生纯swift(2.0)实现 我需要在swift动态框架中实现这一点,因此,如果我不必使用Objective-c代码,这将是更好的,因为这需要我创建一个包含在swift框架中的objc框架等 我想我的问题是,是否有一个本机swift实现,或者是否有一种方法可以使用swift调用zlib以本机方式进行解压缩 谢谢看看苹果今年夏天推出的 我相信它可以解压缩任何ZLIB压缩

我有一些数据是用DEFLATE算法压缩的,我相信基本上就是说压缩了。我正在编写一个swift应用程序,我很想知道是否有解压算法的原生纯swift(2.0)实现

我需要在swift动态框架中实现这一点,因此,如果我不必使用Objective-c代码,这将是更好的,因为这需要我创建一个包含在swift框架中的objc框架等

我想我的问题是,是否有一个本机swift实现,或者是否有一种方法可以使用swift调用zlib以本机方式进行解压缩

谢谢

看看苹果今年夏天推出的

我相信它可以解压缩任何ZLIB压缩文件(除其他外),并且在这方面应该非常有效

看看苹果今年夏天推出的新产品

我相信它可以解压缩任何ZLIB压缩文件(除其他外),并且在这方面应该非常有效

“zipped up”表示.zip格式,这与使用deflate压缩不同。.zip格式是一种压缩数据格式的归档包装器,它允许在单个.zip文件中压缩和存储文件、目录结构以及属性。压缩数据格式包括deflate(这是最常用的格式)

因此,您的deflate压缩数据可能没有以.zip文件格式包装

可以在gzip(.gz)文件、PDF文件、PNG文件和其他格式中找到Deflate压缩数据

在任何情况下,您都可以使用zlib来解压缩原始deflate格式,不管它是否在数据中被包装。zlib已经作为一个共享库出现在OSX和iOS中。正如@MirekE所指出的,您可以从新的文件夹中访问它。

“zipped up”表示.zip格式,这与使用deflate压缩不同。.zip格式是一种压缩数据格式的归档包装器,它允许在单个.zip文件中压缩和存储文件、目录结构以及属性。压缩数据格式包括deflate(这是最常用的格式)

因此,您的deflate压缩数据可能没有以.zip文件格式包装

可以在gzip(.gz)文件、PDF文件、PNG文件和其他格式中找到Deflate压缩数据


在任何情况下,您都可以使用zlib来解压缩原始deflate格式,不管它是否在数据中被包装。zlib已经作为一个共享库出现在OSX和iOS中。正如@MirekE所指出的,您可以从新版本访问它。

在github上有一个zlib的本机swift实现,名为

在github上有一个zlib的本机swift实现,名为

Clean swift 3 wrapper new libcompression:

用法示例:

let s = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ_0123456789"
var res: Data? = s.data(using: .utf8)

res = res?.deflate()
res = res?.inflate()

res = res?.zip()
res = res?.unzip()

res = res?.compress(withAlgorithm: .LZFSE)
res = res?.decompress(withAlgorithm: .LZFSE)

res = res?.compress(withAlgorithm: .LZ4)
res = res?.decompress(withAlgorithm: .LZ4)

res = res?.compress(withAlgorithm: .LZMA)
res = res?.decompress(withAlgorithm: .LZMA)

res = res?.compress(withAlgorithm: .ZLIB)
res = res?.decompress(withAlgorithm: .ZLIB)

assert(res != nil)
let t = String(data: res!, encoding: .utf8)
assert(s == t)

在操场上尝试这一点非常有趣,因为通过更改输入字符串,您可以立即看到压缩比

清洁苹果周围的Swift 3包装物新LIB压缩:

用法示例:

let s = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ_0123456789"
var res: Data? = s.data(using: .utf8)

res = res?.deflate()
res = res?.inflate()

res = res?.zip()
res = res?.unzip()

res = res?.compress(withAlgorithm: .LZFSE)
res = res?.decompress(withAlgorithm: .LZFSE)

res = res?.compress(withAlgorithm: .LZ4)
res = res?.decompress(withAlgorithm: .LZ4)

res = res?.compress(withAlgorithm: .LZMA)
res = res?.decompress(withAlgorithm: .LZMA)

res = res?.compress(withAlgorithm: .ZLIB)
res = res?.decompress(withAlgorithm: .ZLIB)

assert(res != nil)
let t = String(data: res!, encoding: .utf8)
assert(s == t)

在操场上尝试这一点非常有趣,因为通过更改输入字符串,您可以立即看到压缩比

但就zlib而言,这里真的有什么新东西吗?我的意思是,zlib.h一直都是正确的,现在仍然是。@matt我相信这是加速人做的,他们说zlib解压比参考库(不管是什么)快1.6倍。API看起来也与zlib.h不同。更多信息:它看起来像是框架直接使用zlib(因此性能将与zlib相同)。他们也提供了zlib的替代方案,他们自己的专有LZFSE格式提供了与zlib相当的压缩比,但压缩和解压缩速度要快2到3倍。但就zlib而言,这里真的有什么新的东西吗?我的意思是,zlib.h一直都是正确的,现在仍然是。@matt我相信这是加速人做的,他们说zlib解压比参考库(不管是什么)快1.6倍。API看起来也与zlib.h不同。更多信息:它看起来像是框架直接使用zlib(因此性能将与zlib相同)。他们也提供了zlib的替代方案,他们自己的专有LZFSE格式提供了与zlib相当的压缩比,但压缩和解压缩速度要快2到3倍。这是唯一的链接答案。添加详细信息这是链接唯一的答案。Add detailsIt在编写本文时未被维护,也不会为Swift 5编译,而且它不是zlib的本机实现。它只是一个与实际zlib的接口,在编写本文时没有对其进行维护,也不会为Swift 5编译,而且它不是zlib的本机实现。它只是实际zlib的一个接口。