我想在 Squeak、Cuis 或 Pharo Smalltalk 中加入两个 ByteArray 实例
b := #[10 11 12 13] asOrderedCollection.
b addAll: #[21 22 23 24].
b asByteArray
有没有更有效的方法来做到这一点?
串联会更好...?
#[10 11 12 13],#[21 22 23 24 ]
是的。使用 OrderedCollection 将涉及几个不必要的对象分配和冗余复制。您应该创建一个新的字节数组并将源数组的内容复制到其中:
a := #[10 11 12 13].
b := #[21 22 23 24].
c := ByteArray new: (a size + b size).
c replaceFrom: 1 to: a size with: a startingAt: 1.
c replaceFrom: a size + 1 to: c size with: b startingAt: 1.
这仅分配新的 ByteArray 并使用原语进行复制,因此速度非常快。它适用于 Squeak、Cuis 和 Pharo,很可能也适用于其他 Smalltalks。