2015-05-05 4 views
0
(let [buffer (ByteBuffer/allocate 8) 
     arr (byte-array 2)] 
    (doto buffer 
     (.putLong 4) 
     (.get arr))) 
+2

Можете ли вы подробно остановиться на своем вопросе? –

+0

У меня вопрос, потому что я столкнулся с той же проблемой. Почему люди голосуют, не зная? –

ответ

3

Это не совсем понятно, что речь идет, так вот пример чтения и записи из java.nio.ByteBuffer:

байтами:

user> (let [buf-len 8 
      buffer (ByteBuffer/allocate buf-len) 
      arr (byte-array 2)] 
     (doseq [x (range buf-len)] 
      (.put buffer x (byte x))) 
     (.get buffer arr 0 (count arr)) 
     (println "buffer contains" 
       (for [x (range buf-len)] 
        (.get buffer x))) 
     (println "arr contains" (vec arr))) 
buffer contains (0 1 2 3 4 5 6 7) 
arr contains [0 1] 
nil 

и долгот:

user> (let [buf-len 8 
      buffer (ByteBuffer/allocate buf-len) 
      arr (byte-array 2)] 
     (.putLong buffer 0 Long/MAX_VALUE) 
     (.get buffer arr) 
     (println "buffer contains" 
       (for [x (range buf-len)] 
        (.get buffer x))) 
     (println "arr contains" (vec arr))) 
buffer contains (127 -1 -1 -1 -1 -1 -1 -1) 
arr contains [127 -1] 
nil 

и ваш оригинальный пример был очень близок, ему просто нужно было смещение:

user> (let [buffer (ByteBuffer/allocate 8) 
      arr (byte-array 2)] 
     (doto buffer 
      (.putLong 0 4) 
      (.get arr))) 
#<HeapByteBuffer java.nio.HeapByteBuffer[pos=2 lim=8 cap=8]>