Рубрики
Без рубрики

Активный сериализатор. Сверхбыстрая Библиотека Сериализации Java

Активный сериализатор – это современный генератор байт-кода чрезвычайно быстрых и компактных сериализаторов для… Помеченный java.

Активный сериализатор – это современный байт-кодегенератор чрезвычайно быстрых и компактных сериализаторов для передачи данных. Его основными функциями являются максимальная производительность и оптимизированная модель программирования. Активный сериализатор не создает избыточных слоев объектов передачи данных и работает напрямую с классами Java с помощью аннотаций.

Активный сериализатор действительно мощный инструмент:

  • Работает непосредственно с классами Java с помощью аннотаций. Никаких дополнительных уровней промежуточных классов DTO.
  • Реализовано с использованием генерации байт-кода во время выполнения, чтобы быть совместимым с динамически создаваемыми классами.
  • Стабильный двоичный формат с обратной двоичной совместимостью.
  • Поддержка эволюции схемы: изменяемые версии, добавленные или удаленные поля и т.д.
  • Может быть легко расширен – вы можете написать свои собственные плагины для определенных классов.
  • Включает специальные подсказки для еще более эффективного кода: форматы строк, nullable, var len и т. Д.
  • Предоставляет небольшой конечный формат для встроенных функций JVM.
  • Поддержка небезопасного режима для лучшей производительности.
  • Циклические ссылки любой сложности.
  • Кодировка UTF-8, UTF-16 и ISO 8859-1.
  • Совместим даже со сложными коллекциями, универсальными и обнуляемыми значениями.

Представление

Согласно Активному сериализатору веб-сайту , он утверждает, что является самым быстрым сериализатором на основе JVM среди существующих по результатам популярного тестового инструмента сериализатора JVM . Такая производительность Активного сериализатора является результатом хорошо продуманной архитектуры и широкого использования библиотеки Active Codegen для динамической генерации кода во время выполнения. Давайте проверим Активный сериализатор выход!

Простая сериализация Объектов

Давайте создадим сериализуемый POJO, используя @@Сериализовать и @Десериализовать аннотации:

public static class Person {
    //use @Deserialize annotation with property name in constructor
    public Person(@Deserialize("age") int age, @Deserialize("name") String name) {
        this.age = age;
        this.name = name;
    }

    // Use @Serialize annotation with order number on properties or their getters.
    // The name of the property must be the same as declared in @Deserialize annotation.
    // order number provides compatibility.
    @Serialize(order = 0)
    public int age;

    @Serialize(order = 1)
    public final String name;

    private String surname;

    @Serialize(order = 2)
    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}

Этого достаточно, чтобы сделать класс сериализуемым. Теперь давайте создадим экземпляр Person и Двоичный сериализатор (представляет сериализатор, который будет кодировать и декодировать значения в байтовые массивы). Поэтому нам также понадобится массив байтов для хранения результата сериализации.

Person john = new Person(34, "John");
john.setSurname("Smith");
byte[] buffer = new byte[200];
BinarySerializer serializer = SerializerBuilder.create(getSystemClassLoader())
    .build(Person.class);

Чтобы кодировать и декодировать наш экземпляр, просто используйте encode и декодировать методы:

serializer.encode(buffer, 0, john);
Person johnCopy = serializer.decode(buffer, 0);

Давайте перейдем к чему-то немного более сложному.

Сериализация обобщений и интерфейсов

Активный сериализатор позволяет работать с интерфейсами и универсальными приложениями с помощью простого DSL. Во-первых, давайте создадим Навык класс:

public static class Skill {
    private K key;
    private V value;

    public Skill(@Deserialize("key") K key, @Deserialize("value") V value) {
        this.key = key;
        this.value = value;
    }

    @Serialize(order = 0)
    public K getKey() {
        return key;
    }

    @Serialize(order = 1)
    public V getValue() {
        return value;
    }
}

Далее мы создадим интерфейс Person . У него будет метод, который возвращает список навыков:

public interface Person {
    @Serialize(order = 0)
    List> getSkills();
}

Теперь нам нужно создать класс, который будет реализовывать Person интерфейс. Пусть это будет Разработчик :

public static class Developer implements Person {
    private List> list;

    @Serialize(order = 0)
    @Override
    public List> getSkills() {
        return list;
    }

    public void setSkills(List> list) {
        this.list = list;
    }
}

Теперь создайте экземпляр Разработчик , Двоичный сериализатор<Разработчик> и массив байтов:

Developer developer = new Developer();
developer.setSkills(Arrays.asList(
    new Skill<>(1, "Java"),
    new Skill<>(2, "ActiveSerializer")));

byte[] buffer = new byte[200];
BinarySerializer serializer = SerializerBuilder.create(getSystemClassLoader())
        .build(Developer.class);

Теперь вы можете сериализовать и десериализовать Разработчик экземпляр с методами кодирования и декодирования:

serializer.encode(buffer, 0, developer);
Developer developer2 = serializer.decode(buffer, 0);

Есть какие-нибудь вопросы? Добро пожаловать в раздел комментариев!

Оригинал: “https://dev.to/activej/activeserializer-ultra-fast-java-serialization-library-582g”