【发布时间】:2020-01-23 12:06:04
【问题描述】:
我的文档目录中保存了一个大型视频。我想检索这个视频并删除它的前 5 个字节。 对于超过 300 MB 的大型视频文件,使用 [NSData(contentsOf: videoURL)] 会导致内存问题错误。
我已经通过Swift: Loading a large video file (over 700MB) into memory 发现对于大文件我们需要使用[InputStream]和[OutputStream]或者[NSFileHandle]。如何使用它?
示例代码如下:
let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
if let dirPath = paths.first{
let videoURL = URL(fileURLWithPath: dirPath).appendingPathComponent(filePath)
do {
let videoData = try NSData(contentsOf: videoURL)
let mutabledata = videoData.mutableCopy() as! NSMutableData
mutabledata.replaceBytes(in: NSRange(location: 0, length: 5), withBytes: nil, length: 0)
}catch {
print("Error Writing video: \(error)")
}
【问题讨论】:
-
如果要替换 5 个字节,可能会浪费读取整个文件。或许你可以使用
FileHandler的函数如seek和write? -
@netigger 谢谢!如何写入 FileHandler 来做同样的事情?
-
对不起
FileHandle: developer.apple.com/documentation/foundation/filehandle/… -
@netigger 是否已弃用?
-
哦,我没注意到:|
标签: ios swift nsinputstream nsfilehandle nsoutputstream