Clojure 将字节数组的大小前置到字节数组

Clojure 将字节数组的大小前置到字节数组,clojure,Clojure,我有一个字节数组,例如: (def g (byte-array (map byte [0 1 2 3]))) 如何获取它的大小,以及如何将此大小预先添加到g字节数组中?不确定预先添加大小是什么意思,但您可以使用count user=> (def g (byte-array (map byte [0 1 2 3]))) #'user/g user=> (count g) 4 不确定您对预先设置大小的含义,但您可以使用count user=> (def g (byte-arra

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

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

如何获取它的大小,以及如何将此大小预先添加到g字节数组中?

不确定预先添加大小是什么意思,但您可以使用
count

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

不确定您对预先设置大小的含义,但您可以使用
count

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

预弯部分可以这样做(可能不是最好的解决方案):

它返回:

[4, 0, 1, 2, 3]
我认为应该使用
(alength g)
表示Java数组的长度


当然,如果字节数组的长度超过255,则在将长度添加为单个字节时会遇到问题。

可以这样做预结束部分(可能不是最佳解决方案):

它返回:

[4, 0, 1, 2, 3]
我认为应该使用
(alength g)
表示Java数组的长度


当然,如果字节数组的长度超过255,则在将长度添加为单个字节时会遇到问题。

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)))

a长度
将为您提供尺寸

您必须创建一个新的数组来预处理它。下面是:

(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)))

谢谢,我的意思是将大小添加到数组的开头。对于google协议缓冲区。谢谢,我的意思是将大小添加到数组的开头。对于google协议缓冲区。可能是
(字节数组(cons(->g count byte)g))
?如果您需要强制转换所有内容,请使用
(->)(cons(count g)g)(map byte)byte array)
可能是这样的:
(def g(->[01 2 3](#(cons(count%)%))(map byte)(byte array))
可能
(byte array(cons(->g count byte)g))
?或者如果您需要强制转换所有内容,则可以使用以下方式:
(cons(count g)g)(map byte)(byte array))
(def g(->[0 1 2 3](#(cons(count%)%))(map byte)(byte array))