4

我想在 Squeak、Cuis 或 Pharo Smalltalk 中加入两个 ByteArray 实例

b := #[10 11 12 13] asOrderedCollection.
b addAll: #[21 22 23 24].
b asByteArray

有没有更有效的方法来做到这一点?

4

2 回答 2

9

串联会更好...?

#[10 11 12 13],#[21 22 23 24 ]
于 2013-02-08T11:18:37.773 回答
4

是的。使用 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。

于 2013-02-07T19:47:50.323 回答