Объяснение классов декодера Apache MINA

В настоящее время я копаюсь в Apache MINA. Это отличный фреймворк с множеством возможностей. Самой сложной частью до сих пор была часть декодера. Проверяя документы API, я понимаю, что есть следующие классы, которые можно расширять и реализовывать самостоятельно:

  1. DemuxingProtocolDecoder — составной ProtocolDecoder, который демультиплексирует входящие запросы декодирования IoBuffer в соответствующий MessageDecoder.
  2. ObjectSerializationDecoder — ProtocolDecoder, который десериализует сериализуемые объекты Java с помощью IoBuffer.getObject(ClassLoader).
  3. PrefixedStringDecoder — ProtocolDecoder, который декодирует строку с использованием префикса фиксированной длины.

Все вышеперечисленное расширяет класс CumulativeProtocolDecoder — ProtocolDecoder, который накапливает содержимое полученных буферов в кумулятивный буфер, чтобы помочь пользователям реализовать декодеры.

  • Не могли бы вы указать несколько реальных примеров, какой подкласс CumulativeProtocolDecoder вы бы использовали или использовали и почему?
  • Есть ли пример, в котором не требуется, чтобы декодер расширял класс CumulativeProtocolDecoder и просто реализовывал ProtocolDecoder напрямую, не беспокоясь о фрагментации?

person Alkis Kalogeris    schedule 01.09.2013    source источник


Ответы (1)


Я использую экземпляр класса DemuxingProtocolDecoder с моим приложением. В пакете org.apache.mina.filter.codec.demux есть несколько интерфейсов и классов, которые вы можете использовать для декодирования ваших сообщений. Существует интерфейс под названием MessageDecoder. Создайте свой собственный класс, который реализует этот интерфейс, и MINA будет работать. Что-то вроде этого,

public class MyDecoder implements MessageDecoder {
      public MessageDecoderResult decode(IoSession session, IoBuffer buffer, ProtocolDecoderOutput decoderOutput) throws Exception {
           /* Your
              decode
              mechanism */
           decoderOutput.write(message); // don't forget to write your decoded message object at some point.
           return MessageDecoder.OK; //or something else that matches your needs.
      }
}
person misterbaykal    schedule 14.02.2014