2016-05-18 5 views
3

В настоящее время я обращаюсь к двоичному сетевому протоколу mmorpg. Я реализую протокол в java.De-/Serialize двоичные данные

Для каждого типа пакета Я создам класс, представляющий двоичные данные.

Например, чат-пакеты ("ASD")

header = 0c75 
03 00 61 73 64 00 . . a s d . 

код Java:

public class Chat { 
    private short length; 
    private String msg; 
} 

Есть ли библиотека для десериализации массива байт непосредственно в объект. В основном что-то вроде Jackson или OrmLite для двоичных данных.

Кто-нибудь знает, есть ли библиотека, которую можно использовать? Я уже искал здесь и в Google, но не нашел то, что искал. Я даже начал писать собственный Сериализатор.

+1

[Буферы протокола] (https://developers.google.com/protocol-buffers/) могут вам помочь? – t0mm13b

+0

Да, я уже видел буфер протокола, но я не мог найти никакой информации о том, как они сериализуют данные. Крайне важно, чтобы я мог контролировать порядок заполнения полей, поскольку у меня нет контроля над данными, которые я получаю с сервера. Мне также не очень нравится идея создания моей структуры данных, а затем ее необходимо скомпилировать в java. – PeterLudolf

+0

серверу необходимо будет реализовать его на своем конце и на вашем, чтобы его пение с одного и того же листа гимнов, так что это из окна. Будут ли данные, поступающие с сервера, бинарными? В любом случае вам нужно будет реализовать массив байтов какого-то типа с помощью getcha, как бы вы знали начало/конец пакетных данных? – t0mm13b

ответ

0

Каждая библиотека сериализации (что я знаю?) Определяет свой собственный двоичный формат - поэтому двоичное представление полностью определяется файлом класса/idl и не может быть адаптировано к пользовательскому протоколу. общие бинарные форматы:

если протокол Youre реверс-инжиниринг не случается быть общий один (? может быть, Theyre используя прото внутри), то ваш только вариант заключается в том, чтобы реализовать Serializable/Externalizable самостоятельно или, может быть, внести kryo и определить свои собственные сериализаторы (де) - в любом случае вы будете писать объект < -> byte []/логика преобразования потока/буфера.