在 Swift 3.x 中,我们通常使用以下方式处理二进制数据Data
;从它你可以生成大多数其他重要的类型,并且它上面有有用的函数。
但我如何创建一个Data
从一个InputStream
?有什么好的办法吗?
我找不到好的方法。我们可以围绕不安全的东西创建一个漂亮的包装器:
extension Data {
init(reading input: InputStream) throws {
self.init()
input.open()
defer {
input.close()
}
let bufferSize = 1024
let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: bufferSize)
defer {
buffer.deallocate()
}
while input.hasBytesAvailable {
let read = input.read(buffer, maxLength: bufferSize)
if read < 0 {
//Stream error occured
throw input.streamError!
} else if read == 0 {
//EOF
break
}
self.append(buffer, count: read)
}
}
}
这是针对 Swift 5 的。通过测试查找完整代码(以及仅读取部分流的变体)here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)