Swift中如何仅读取文件开头部分内容而不加载整个文件
Swift读取文件前16字节的最优实现
使用FileHandle做定向部分读取是最优方案,不会将整个文件加载到内存,仅读取目标长度的字节内容,大文件场景下也完全不会有内存压力。
新版系统兼容代码(iOS 13.4+/macOS 10.15.4+)
func readFirst16Bytes(from fileURL: URL) throws -> Data { let fileHandle = try FileHandle(forReadingFrom: fileURL) // 方法执行结束前自动关闭文件句柄,避免资源泄漏 defer { fileHandle.closeFile() } // 仅读取最多16个字节的内容 return try fileHandle.read(upToCount: 16) ?? Data() }
全版本兼容代码
如果需要适配更低的系统版本,可以使用经典API实现:
func readFirst16Bytes(from fileURL: URL) throws -> Data { let fileHandle = try FileHandle(forReadingFrom: fileURL) defer { fileHandle.closeFile() } return fileHandle.readData(ofLength: 16) }
说明
- 如果文件本身的大小不足16字节,上述方法会直接返回文件全部内容,无需额外判断
- 必须添加
defer关闭文件句柄的逻辑,否则多次调用会出现系统资源占用泄漏的问题
内容的提问来源于stack exchange,提问作者Rob N
相关产品推荐
相关产品推荐

