Зачем нужно выбирать рамки сериализации, когда java предоставляет API для этого? - PullRequest
0 голосов
/ 20 сентября 2019

Я читаю об Avro и пытаюсь сравнить систему сериализации avro и java.Но почему-то я не могу понять, почему avro используется для сериализации данных вместо Java-сериализации.На самом деле, почему пришла другая система, чтобы заменить систему сериализации Java?

Вот краткое изложение моего понимания.Чтобы использовать возможности сериализации Java, мы должны заставить этот класс реализовывать интерфейс Serilizable.Если вы делаете это и сериализуете объект, то во время десериализации что-то вроде

e = (Employee) in.readObject ();

Далее мы можем использовать методы получения / установки для игры с объектом сотрудника.

В avro First - это определение схемы.Далее следует использовать API avro для сериализации.Опять же при десериализации происходит что-то вроде этого.

Далее мы можем использовать геттеры / сеттеры для игры с объектом работника.

Вопрос в том, что я не вижу никакой разницы, только в том, чтоAPI, который использовал это по-другому?Может кто-нибудь прояснить мои сомнения?

public AvroHttpRequest deSerealizeAvroHttpRequestJSON(byte[] data) {
DatumReader<AvroHttpRequest> reader
     = new SpecificDatumReader<>(AvroHttpRequest.class);
    Decoder decoder = null;
    try {
        decoder = DecoderFactory.get().jsonDecoder(
          AvroHttpRequest.getClassSchema(), new String(data));
        return reader.read(null, decoder);
    } catch (IOException e) {
        logger.error("Deserialization error:" + e.getMessage());
    }}

Далее мы можем использовать геттеры / сеттеры для игры с объектом сотрудника.

Вопрос в том, что я не вижу никакой разницы между этими двумяподходы.Оба делают одно и то же.Только что API разные?Может кто-нибудь помочь мне лучше понять это?

1 Ответ

1 голос
/ 20 сентября 2019

Встроенная Java-сериализация имеет несколько существенных недостатков.Например, без тщательного рассмотрения вы, возможно, не сможете десериализовать объект, который может не иметь никаких изменений в данных, а только изменений в методах класса.

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

Сторонняя библиотека сериализации может помочь смягчить это, используя абстрактное сопоставление для объединения данных.Хорошо продуманные библиотеки сериализации могут даже предоставлять сопоставления между различными версиями объекта.

Наконец, обработка ошибок для сторонних библиотек сериализации обычно более полезна для разработчика или оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...