我想通过指定内存大小来对Data
类型的变量进行切片。假设我只想要一个音频文件的初始1000字节。我正在尝试以下代码。两个变量都指向相同的内存地址,但大小与预期的不同,因此似乎有效,但不确定是否真的有效。
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)
- 以上代码是否如我所期望的那样工作
- 对上述方法有任何顾虑吗
- 有什么更好的方法来实现这一点吗
Data
切片(由您正在使用的范围下标运算符以及prefix
、suffix
等方法返回(与其"父"Data
共享存储,除非该切片足够小,可以内联存储在Data
结构本身中。(我认为64位平台上的内联数据的最大大小是14字节。(
你可以在这里找到适用于苹果平台的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