首页 > 解决方案 > 如何在不复制的情况下将“数据”对象放入 Swift-NIO?

问题描述

我对 Swift陌生,对 NIO 也很陌生。

我正在将 Swift 代码添加到需要将大量数据 (GB) 上传/下载到 AWS 的大型项目中。为此,我导入了严重依赖 NIO的 GitHub 项目Soto 。

大多数发送/接收数据的方法都是通过ByteBuffer结构来完成的。我的应用程序已经有数据要上传到 FoundationData对象中。我很难找出将这些Data对象放入 NIO 的最佳方法。

NIO ByteBuffer(2.26.0)的文档中,它指出

支持的类型:可以从 ByteBuffer 读取/写入多种类型。...开箱即用,ByteBuffer 支持例如以下类型(非详尽列表):

但是,最新的 swift-nil 包不ByteBuffer支持 FoundationData对象。相反,它支持DispatchData对象,而对象又似乎与对象没有互操作性Data

我要避免的是复制每个数据块(一次 100 MB),只是为了在DataDispatchData类型之间进行转换。

所以...

现在我的想法是其中之一

我将不胜感激任何想法、经验或建议(特别是如果它是选项#1)。

标签: swiftmacosfoundationswift-niosoto

解决方案


您需要import NIOFoundationCompat获取任何适用于(或/ )Foundation等数据类型的 NIO 方法。只是包的另一个模块,因此您不需要另一个依赖项。DataJSONDecoderJSONEncoderNIOFoundationCompatswift-nio

但要明确一点,在幕后,总会有副本,但您可能不需要担心它们,副本在当今的 CPU 上非常快。如果您绝对想避免复制,则需要立即创建ByteBuffers。为了帮助您解决这个问题,您可能需要添加从哪里获取您想要通过网络发送的数据。


推荐阅读