Size: a a a

Clojure — русскоговорящее сообщество

2021 April 24

A

Aleksey @cheatex in Clojure — русскоговорящее сообщество
look for clojurians slack. it has quite active calva channel.
источник

S

Sajjad in Clojure — русскоговорящее сообщество
Thank you! I'll check it out!
@aorst @cheatex
источник

A

Andrey in Clojure — русскоговорящее сообщество
np :)
источник
2021 April 26

А

Алексей in Clojure — русскоговорящее сообщество
ребят, а подскажите вот какой момент пожалуйста.
Пишу на кложе сервис, который принимает данные по udp, там свой бинарный протокол: сам по себе достаточно простой, по сути, просто последовательность полей без какой-либо информации о разметке. Так вот, мне нужно как-то парсить эти самые поля. На C/C++ я бы просто поставил указатель нужного типа на кусок памяти и дело в шляпе. Как это делается "идиоматично" на Java/Clojure?
источник

A

Andrey in Clojure — русскоговорящее сообщество
ByteBuffer наверное
источник

DL

Dmytro Lispyvnyi '(🌲... in Clojure — русскоговорящее сообщество
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Зависит от сетевой библиотеки, что ты используешь, в Netty ByteBuf, в стандартной либе Java ByteBuffer. Не знаю, что тут можно сказать про идиоматичность :)
источник

А

Алексей in Clojure — русскоговорящее сообщество
о, спасибо, почитаю
источник

А

Алексей in Clojure — русскоговорящее сообщество
не, сама логика получения данных есть, получаю как раз ByteBuffer, а вот как потом его превратить в какую-нибудь структуру - черт знает.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
А, правильно ли понял, что вопрос в том, как прочитать из байтбуффера n полей?
источник

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
источник

А

Алексей in Clojure — русскоговорящее сообщество
спасибо, тоже гляну
источник

А

Алексей in Clojure — русскоговорящее сообщество
да, то есть например есть класс
class Foo {
int bar;
short bar2;
}

как буфер превратить в объект Foo
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
А нужно именно в объект класса спарсить?
источник

А

Алексей in Clojure — русскоговорящее сообщество
сам протокол простой, в памяти он так и лежит <4 байта int><2 байта short> ну и так далее
источник

А

Алексей in Clojure — русскоговорящее сообщество
да, желательно
источник

А

Алексей in Clojure — русскоговорящее сообщество
понятно, что можно забирать данные руками, типа

(let [wrapped-buffer (ByteBuffer/wrap data)
       reversed (.order wrapped-buffer ByteOrder/LITTLE_ENDIAN)]
   (println "size:" (.getShort reversed))
   (println "seq:" (.getLong reversed 4)))

но выглядит как-то грязно)
источник

A

Andrey in Clojure — русскоговорящее сообщество
а он packed или с выравниваниями?
источник

А

Алексей in Clojure — русскоговорящее сообщество
packed
источник

A

Andrey in Clojure — русскоговорящее сообщество
я бы для начала написал функцию которая принимает буффер и вычитывает из него нужные размеры и укладывает их в нужные поля в мапке.
источник