Определение типа сериализации Kryo

Я использую Kryo IO напрямую для выполнения моей собственной низкоуровневой примитивной сериализации строк, длинных и двойных чисел.

Мне интересно, есть ли способ для Kryo IO автоматически определять примитивные типы данных из сериализованных байтов при их чтении?

Если у меня есть байтовый массив, состоящий, скажем, из 10 сериализованных значений, и я не знаю, были ли они строками, длинными или двойными; Есть ли у Kryo способ определить типы данных (например, MsgPack)?


person Kong    schedule 27.02.2014    source источник


Ответы (1)


Kryo в этом отношении не отличается от обычной сериализации Java. Есть два способа, которыми десериализатор может узнать, какой тип десериализируется каждый раз:

  1. Это поле в известном классе, поэтому реализация десериализатора читает каждое поле в правильном порядке.

  2. Информация о типе встроена в поток каким-то образом, чтобы сообщить ему об этом. Метод writeClassAndObject() в Kryo делает именно это - он добавляет компактный идентификатор класса к фактическому содержимому объекта, позволяя десериализатору знать, что делать.

    В качестве альтернативы вы можете сделать что-то подобное вручную, например. отправив один байт, который выберет из ограниченного числа поддерживаемых типов.

Кроме того, это то, что требует формат MessagePack ...

person thkala    schedule 27.02.2014
comment
Я только что потратил день на перенос своей сериализации с MsgPack на Kryo. Крио - это глоток свежего воздуха! - person Kong; 28.02.2014