将字节数组的大小预先添加到字节数组中

时间:2014-02-14 19:52:52

标签: clojure

我有一个字节数组,例如:

(def g (byte-array (map byte [0 1 2 3])))

如何获得它的大小以及如何将此大小添加到g字节数组?

3 个答案:

答案 0 :(得分:3)

alength会为您提供尺寸。

您必须创建一个新数组才能添加它。这是:

(def g' (let [len (alength g)
              bs (byte-array (inc len))]
          (do (System/arraycopy g (int 0) bs (int 1) len)
              (aset bs (int 0) len)
              bs)))

答案 1 :(得分:2)

前置部分可以像这样完成(可能不是最佳解决方案):

(def g (byte-array (apply #(cons (byte (count %)) %) [(map byte [0 1 2 3])])))

它返回:

[4, 0, 1, 2, 3]

我认为您应该使用(alength g)作为Java数组的长度。

当然,如果你的字节数组超过255,那么将长度添加为单个字节会有问题。

答案 2 :(得分:0)

不确定您在预设大小时的意思,但您可以使用count

获取大小
user=> (def g (byte-array (map byte [0 1 2 3])))
#'user/g
user=> (count g)
4