将InputStream读入Data对象

Rap*_*ael 5 inputstream stream binary-data swift

在Swift 3.x中,我们通常使用Data; 从中你可以生成大多数其他重要类型,并且它上面有很多有用的功能.

但是我如何创建Data一个InputStream?有一个很好的方式吗?

Rap*_*ael 13

我找不到一个好方法.我们可以围绕不安全的东西创建一个很好的包装器:

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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查找完整的代码与测试这里.