我想通过指定内存大小来对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)
- 上述代码是否如我预期的那样工作?
- 对上述做法有何担忧?
- 有没有更好的方法来实现同样的目标?
1条答案
按热度按时间i7uq4tfw1#
Data
切片(由您使用的范围下标操作符以及prefix
、suffix
等方法返回)与其“父”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