swift - 将 NSMutableData 的一部分复制到新的 NSMutableData 对象
问题描述
我正在将一个大文件读入 NSMutableData 对象。
var lBuffer : NSMutableData = try NSMutableData(contentsOfFile: pFilePath)
我想一次使用 NSMutableData 对象的一部分。所以我正在尝试使用 .subdata(with: NSRange),但出现错误。
var lBufferChunk : NSMutableData = lBuffer.subdata(with: NSRange(location: 0, length: lSizeOfChunk)) as! NSMutableData
我得到的错误是:
无法将“NSSubrangeData”(0x7fffa6ea3ef8)类型的值转换为“NSMutableData”(0x7fffa6a403f8)
根据文档, .subdata(with: NSRange) 应该返回一个 Data 对象。
如何将其转换为 Data 对象以将其转换回 NSMutableData?或者有没有更好的方法从大型 NSMutableData 中获取一部分/片段?
解决方案
如果你真的想要,你可以将调用的结果lBuffer.subdata
转换为 NSData,然后调用mutableCopy()
并将结果强制转换为 NSMutableData。但是不要!首先不要使用 NSData 或 NSMutableData。这是斯威夫特。使用数据。
var lBuffer = Data(contentsOf: myFileURL)
现在只需打电话subdata(in:)
var lBufferChunk = lBuffer.subdata(in: myRange)
或下标
var lBufferChunk = lBuffer[myRange]
var
使其可变。
推荐阅读
- c++ - 为什么我的“main()”函数不会调用 void 函数?
- c# - 来自现有数据库的自定义基于角色的授权
- logical-operators - 卡诺图简化了布尔代数的逻辑表达式
- asp.net-core - 是否可以使用进程内 aspnet core 3 进行实时重新加载?
- asp.net-core - 无法跟踪实体类型“”的实例,因为已在跟踪另一个具有键值“{Id: 13}”的实例
- json - HERE Maps API:如何搜索 100 多个地点
- c# - 导致错误 MC1000 的原因:未知构建错误,“找不到程序集 'System.Runtime.InteropServices.PInvoke ...”
- bash - 管道服务器评估未正确返回
- python - 为什么 makedirs() 创建一个空文件而不是文件夹?
- c# - 如何在 IMemoryCache 的单独实例中清除 cacheKey