在 Swift 中将 [Bit] 序列化为 NSData
Serialize [Bit] to NSData in Swift
我正在 Swift 中实现 Haffman 编码,为了从这种编码中获益,我需要尽可能有效地序列化我的一零序列。在这种情况下通常的方法是使用位数组。 Swift 包含 Bit
类型,将序列转换为 [Bit]
没有问题,但我还没有找到任何标准解决方案来从这个数组中获取 NSData
。我看到的唯一方法是创建 [Int8]
(可以序列化)并使用按位运算符手动填充所有位,在最坏的情况下,我将在最后一个元素中丢失 7 位。
那么是否有[Bit]序列化的标准(即用型)解决方案?
简单的答案是否定的。
Swift 中的位实现为 public enum Bit : Int, Comparable, RandomAccessIndexType, _Reflectable { ... }
。除了明确定义的抽象级别外,我看不出将 Bit 类型用于 Int 有任何优势。最小的 NSData 实例至少使用一个字节(实际上内存使用量取决于底层处理器功能。序列化也只是一种抽象,您可以将 [Bit] 序列化为单词序列 "Bit with binary value One", "Bit with binary value Zero", ....为了将你的位序列保存到 NSData 并能够重建它(反序列化),你仍然需要做某种 'binary protocol'。至少你需要保存的数字位作为数据的一部分。如果您使用霍夫曼编码,您也需要保存符号 table ...
我正在 Swift 中实现 Haffman 编码,为了从这种编码中获益,我需要尽可能有效地序列化我的一零序列。在这种情况下通常的方法是使用位数组。 Swift 包含 Bit
类型,将序列转换为 [Bit]
没有问题,但我还没有找到任何标准解决方案来从这个数组中获取 NSData
。我看到的唯一方法是创建 [Int8]
(可以序列化)并使用按位运算符手动填充所有位,在最坏的情况下,我将在最后一个元素中丢失 7 位。
那么是否有[Bit]序列化的标准(即用型)解决方案?
简单的答案是否定的。
Swift 中的位实现为 public enum Bit : Int, Comparable, RandomAccessIndexType, _Reflectable { ... }
。除了明确定义的抽象级别外,我看不出将 Bit 类型用于 Int 有任何优势。最小的 NSData 实例至少使用一个字节(实际上内存使用量取决于底层处理器功能。序列化也只是一种抽象,您可以将 [Bit] 序列化为单词序列 "Bit with binary value One", "Bit with binary value Zero", ....为了将你的位序列保存到 NSData 并能够重建它(反序列化),你仍然需要做某种 'binary protocol'。至少你需要保存的数字位作为数据的一部分。如果您使用霍夫曼编码,您也需要保存符号 table ...