Swift 不复制数据的字符串
我想从Swift 不复制数据的字符串,swift,string,Swift,String,我想从数据创建一个字符串,无需复制。我一直在尝试使用 String(bytesnopy:UnsafeMutableRawPointer,length:Int,encoding:String.encoding,freeWhenDone:Bool) 无论我如何尝试,它总是返回零。如果我使用String(字节:…,编码:…)创建它,它会成功 是否有一种方法可以尝试从数据对象创建字符串,而不复制字节 以下是它的来源和我的尝试: ... // get the data. This succeeds
数据
创建一个字符串
,无需复制。我一直在尝试使用
String(bytesnopy:UnsafeMutableRawPointer,length:Int,encoding:String.encoding,freeWhenDone:Bool)
无论我如何尝试,它总是返回零。如果我使用String(字节:…,编码:…)
创建它,它会成功
是否有一种方法可以尝试从数据
对象创建字符串
,而不复制字节
以下是它的来源和我的尝试:
...
// get the data. This succeeds
guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
return .failed
}
//Tried:
let ptr = UnsafeMutableRawPointer(&data)
let str = String(bytesNoCopy: ptr, length: data.count, encoding: .utf8, freeWhenDone: false)
通过再次尝试,我发现了一种行之有效的方法:
...
// get the data. This succeeds
guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
return .failed
}
data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer<UInt8>) -> Void in
let unsafePtr = UnsafeMutableRawPointer(ptr)
// This is now working
let str = String(bytesNoCopy: unsafePtr, length: data.count, encoding: .utf8, freeWhenDone: false)
}
。。。
//获取数据。这成功了
guard var data=try?数据(内容:url,选项:.mappedIfSafe)其他{
返回。失败
}
data.withUnsafeMutableBytes{(ptr:UnsafeMutablePointer)->中的Void
让unsafePtr=UnsafeMutableRawPointer(ptr)
//这是现在的工作
let str=String(bytesnopy:unsafePtr,长度:data.count,编码:.utf8,freewwhendone:false)
}
通过再次尝试,我找到了一种有效的方法:
...
// get the data. This succeeds
guard var data = try? Data(contentsOf: url, options: .mappedIfSafe) else {
return .failed
}
data.withUnsafeMutableBytes { (ptr: UnsafeMutablePointer<UInt8>) -> Void in
let unsafePtr = UnsafeMutableRawPointer(ptr)
// This is now working
let str = String(bytesNoCopy: unsafePtr, length: data.count, encoding: .utf8, freeWhenDone: false)
}
。。。
//获取数据。这成功了
guard var data=try?数据(内容:url,选项:.mappedIfSafe)其他{
返回。失败
}
data.withUnsafeMutableBytes{(ptr:UnsafeMutablePointer)->中的Void
让unsafePtr=UnsafeMutableRawPointer(ptr)
//这是现在的工作
let str=String(bytesnopy:unsafePtr,长度:data.count,编码:.utf8,freewwhendone:false)
}
显示您的实际代码,包括所有相关数据访问。显示您的实际代码,包括所有相关数据访问。