连接两个ByteArray实例的最有效方法是什么?

时间:2013-02-07 19:24:42

标签: smalltalk pharo squeak

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

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

有更有效的方法吗?

2 个答案:

答案 0 :(得分:9)

连接会更好......?

#[10 11 12 13],#[21 22 23 24 ]

答案 1 :(得分: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中使用。