2014-02-14 3 views

ответ

2

В Предварение часть может быть сделано, как это (вероятно, не самое лучшее решение):

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

возвращает:

[4, 0, 1, 2, 3] 

Я думаю, что вы должны использовать (alength g) для длины массива Java.

Конечно, если ваш массив байтов длиннее 255, у вас возникнут проблемы с добавлением длины в виде одного байта.

+0

Может быть '(byte-array (cons (-> g count byte) g))'? Или '(- >> (cons (count g) g) (байтовый байт) byte-array)', если вам нужно все бросить? – Beyamor

+0

Может быть так: '(def g (- >> [0 1 2 3] (# (cons (count%)%)) (байт карты) (byte-array)))' – jdb

0

Не уверен, что вы имеете в виду о предваряя размер, но вы можете получить размер с помощью count

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

Спасибо, я хочу добавить размер в начало массива. Для буферов протокола Google. – user1676605

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))) 
Смежные вопросы