gpt4 book ai didi

arrays - swift 是否遇到 Java 的 2gb 最大序列化大小问题?

转载 作者:行者123 更新时间:2023-12-05 04:19:55 24 4
gpt4 key购买 nike

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

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

问题是 byte[] 和其他数组是使用 int 索引的,当您创建数组时,您还使用 int ,例如:byte[] a = new byte[your int goes here]。您不能使用 long(64 位整数)创建数组,因此您的最大数组大小受限于最大整数,即 2,147,483,647(实际上最大数组大小要小一些: 2,147,483,6475), 所以 byte[] 类型的最大数组只能存储大约 2gb 的数据。

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

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

我说 Swift 没有遇到这个问题是对的吗,因为数组是使用 Int 索引的(在 64 位系统上是 64 位),字节数组的大小可以是 min(Int.max, maximum_number_available_by_the_os )?

最佳答案

是的,你是对的。 swift 的 Int类型,整数边界的首选类型,是字大小,即在 64 位机器上为 64 位,在 32 位机器上为 32 位。这意味着索引到 Array , 你可以超越 2^31-1限制。

虽然惯用,更高级别的类型如 Foundation 的 Data NIOCore.ByteBuffer 来自 swift-nio 通常首选作为“字节袋”类型而不是 [UInt8] (Swift 相当于 byte[] ),这些类型也使用 Int 索引,因此大小也不限于 2GiB。

关于arrays - swift 是否遇到 Java 的 2gb 最大序列化大小问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74634848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com