在Java和其他基于JVM的语言中,通常需要将事物序列化为字节array.例如,当您想要通过网络发送某些内容时,首先要将其序列化为一个字节array.

在Swift ,人们会这么做吗?或者,当您想要通过网络发送数据时,通常如何序列化数据?

问题是byte[]和其他数组使用int编制索引,并且在创建数组时也使用int,例如:byte[] a = new byte[your int goes here].您不能使用long(64位整数)创建数组,因此您的最大数组大小受最大整数2,147,483,647(实际上最大数组大小略低一点:2,147,483,6475)的限制,因此最大的byte[]类型数组只能存储大约2 GB的数据.

当我使用Spark(一种分布式计算库)时,当我创建数据集时,每个元素占用的RAM不能超过2 GB,因为在内部,当将数据从集群的一个 node 发送到另一个 node 时,它会被序列化,而当我处理大型对象时,我被迫将一个大对象拆分成小对象,以避免序列化异常.

我认为C#和许多其他语言都有同样的问题.Is the 32-bit .NET max byte array size < 2GB?

我说SWIFT没有这个问题是对的,因为数组是使用Int(在64位系统上是64位)进行索引的,而字节数组的大小可以是min(Int.max,Maximum_Numbers_Available_by_the_os)?

推荐答案

是的,你是对的.SWIFT的Int类型是整数界限的首选类型,它是字大小,即64位机器上为64位,32位机器上为32位.这意味着索引到Array,您可以远远超过2^31-1的限制.

尽管习语地说,与[UInt8](SWIFT相当于byte[])相比,更高级别的类型(如Foundation的Dataswift-nioNIOCore.ByteBuffer)通常是首选的"字节袋"类型,这些类型也使用Int进行索引,因此大小也不限于2GiB.

Swift相关问答推荐

@ MainActor + Combine不一致的编译器错误

try 在小部件内部读取核心数据的SwiftUI总是返回空吗?

调度组是否阻止iOS中的主线程?

有没有办法让文本字段以不同的 colored颜色 显示而不影响半透明背景?

在Swift中如何将NSUrl转换为本地路径URL

Swift String.firstIndex(of: "\n") 返回 nil,即使字符串有 \n

如何在 SwiftUI 中为过渡动画保持相同的标识

仅当 boolean 为真时才实现方法(application:didReceiveRemoteNotification)

确定路径是否相交的有效方法

如何在不将变量转换为字符串的情况下判断变量在 Swift 中是否为 Optional(nil)?

快速递归:函数与闭包

使用协议捕获 SwiftUI 视图

`IndexSet` 永远不会是空的?

如何在 Swift 中返回 Task 中定义的变量

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

如果没有标记,则为 Swift 预处理器

FirebaseStorage:如何删除目录

Swift 中 NSFetchRequest 的多个 NSPredicates?

iOS:检测设备是否为 iPhone X 系列(无框)

Swift 2.0 按属性对对象数组进行排序