当前位置: 首页 > 面试题库 >

使用Swift 5+将数据写入OutputStream

庾鸿飞
2023-03-14
问题内容

这段代码曾经很好(在某种意义上,编译器没有抱怨):

extension OutputStream {
    func write(_ data: Data) -> Int {
        return data.withUnsafeBytes { pointer in
            return self.write(pointer, maxLength: data.count)
        }
    }
}

从Swift 5.0开始,这会产生警告:

警告:不建议使用“ withUnsafeBytes”:请withUnsafeBytes<R>(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R改用

我试着用所提出的方法,但我似乎无法缠斗UnsafeRawBufferPointerUnsafePointer<UInt8>OutputStream.write最终需要。

如何以不推荐的方式编写此函数?


问题答案:

诀窍是使用bindMemory函数:

func write(_ data: Data) -> Int {
    return data.withUnsafeBytes({ (rawBufferPointer: UnsafeRawBufferPointer) -> Int in
        let bufferPointer = rawBufferPointer.bindMemory(to: UInt8.self)
        return self.write(bufferPointer.baseAddress!, maxLength: data.count)
    })
}

尽管此功能适用于Swift 5.0,但显然存在一些问题。参见相关论坛讨论。



 类似资料:
  • 显然它无法解码数据。有什么想法吗?

  • 我有一个名为df的数据库数据帧。我想将它作为csv文件写入S3存储桶。我有S3存储桶名称和其他凭据。我检查了这里给出的在线留档https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#mount-aws-s3它说使用以下命令 但我有的是数据帧,而不是文件。怎么才能实现?

  • 问题内容: 是否可以使用PHP fwrite()将内容附加到.xls文件? 当我使用fwrite()尝试此操作时,生成的文件在Excel 2007中导致错误消息。 我可以使用特定的分隔符来完成此操作吗? 没有第三方库,有可能吗? 问题答案: 您可以使用PhpSpreadsheet库读取现有的Excel文件,向其中添加新的行/列,然后将其写回为真实的Excel文件。 免责声明:我是该库的作者之一。

  • 我正在编写一个程序,它将数据写入excel表格的表格格式。我的代码提供了我想要的所有细节。 但是为了得到表格格式,我必须在excel sheet中遵循以下步骤 我想让我的代码自动生成我想要的格式,而不需要我在excel表中执行上面显示的步骤。有人能帮我吗?提前道谢。下面显示的是我的代码。 `

  • 问题内容: 在我们的应用程序中,我们希望用户输入如下: 我想在单元测试中通过该部分,以便我可以恢复线程以执行其余代码。我如何从junit 写入内容? 问题答案: 你想要做的是使用的方法从。这将使您可以从junit 传递数据。