При определении декодера, который должен быть предоставлен классам DatumReader, существует возможность повторного использования декодера, как вы можете видеть ниже. Как упоминалось в документе, класс декодера является неизменным и потокобезопасным, поэтому имеет смысл его повторно использовать. Какая была бы лучшая практика, нужно было бы повторно использовать декодер? Есть ли накладные расходы на производительность, если мы создаем декодер каждый раз, когда мы пытаемся декодировать полезную нагрузку Avro?Avro: повторное использование декодера
DatumReader<T> reader = new ReflectDatumReader<>(writerSchema, readerSchema);
// Second argument is a decoder to be reused
DecoderFactory.get().binaryDecoder(record, null);
reader.read(null, binaryDecoder);
AvroCoder сохраняет декодер в threadlocal, чтобы избежать множественного создания BinaryDecoder, например. Независимо от того, что я не задаю вопрос в отношении AvroCoder, этот вопрос является общим вопросом для Avro. При выполнении вышеуказанного кода мы должны его повторно использовать или нет? Любопытно, если нет никакой пользы, почему вы повторно используете его в AvroCoder? – Mayumi
Я думаю, что избежать воссоздания файлов в AvroCoder немного улучшает производительность в зависимости от размера декодируемых элементов и того, как часто они будут созданы. Но обратите внимание, что он использует 'ThreadLocal' отчасти потому, что декодер не всегда является потокобезопасным. –