2013-09-01 5 views
0

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

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

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

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

ответ

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. 
     } 
}