按大小对SWIFT数据进行切片的最佳/最佳方式是什么?

x4shl7ld  于 2022-09-19  发布在  Swift
关注(0)|答案(1)|浏览(232)

我想通过指定内存大小来对Data类型变量进行切片。假设我只想要一个音频文件的初始1,000字节。我正在尝试以下代码。这两个变量指向相同的内存地址,但大小如预期的不同,因此似乎可以工作,但不确定是否真的有效。

let original = try! Data(contentsOf: URL(string: "https://example.com/audio.mp3")!)
let sliced = original[0..<1_000] // e.g. Only 1000 bytes (I understand the range can not be beyond the actual original data size)
  • 上述代码是否如我预期的那样工作?
  • 对上述做法有何担忧?
  • 有没有更好的方法来实现同样的目标?
i7uq4tfw

i7uq4tfw1#

Data切片(由您使用的范围下标操作符以及prefixsuffix等方法返回)与其“父”Data共享存储,除非该片足够小,可以内联存储在Data结构本身中。(我认为64位平台上的内联数据的最大大小是14个字节。)

您可以在此处找到适用于Apple平台的Data的实现:

https://github.com/apple/swift-corelibs-foundation/blob/main/Darwin/Foundation-swiftoverlay/Data.swift

对于其他平台,实现如下:

https://github.com/apple/swift-corelibs-foundation/blob/main/Sources/Foundation/Data.swift

相关问题