Кажется ясно. А PacketFilter
фильтруют пакеты для обработки PacketListener.
В чем разница между PacketFilter и принять?
Вопрос
В чем разница между этими двумя методами:
ProcessPacket:
PacketListener pListener = new PacketListener() {
@Override
public void processPacket(Packet packet) {
if(packet instanceof Presence) {
//..
}
}
};
а также принимать :
PacketFilter pFilter = new PacketFilter() {
@Override
public boolean accept(Packet packet) {
return true;
}
};
Разве они не способны сделать то же самое?
примечание :
con.addPacketListener(pListener, pFilter);
Решение
Другие советы
Как вы понимаете, PacketFilter используется перед PacketListener для фильтрации данных пакетов типов соответствия. Только пакет, который удовлетворяет PacketFilter, может ввести обработку PacketListener.
И PacketFilter - это интерфейс, который объявляет только метод: принять.
PacketListener предоставляет механизм для прослушивания пакетов, которые проходят указанный фильтр. Это позволяет программировать в стиле событий-каждый раз, когда будет обнаружен новый пакет, будет вызван метод ProcessPacket (Packet). Это противоположный подход к функциональности, предоставленной PacketCollector, который позволяет блокировать в ожидании результатов.
PacketFilter определяет способ фильтрации пакетов для определенных атрибутов. Фильтры пакетов используются при строительстве слушателей или коллекционеров пакетов - фильтр определяет, какие пакеты соответствуют критериям коллекционера или слушателя для дальнейшей обработки пакетов.
Несколько предварительно определенных фильтров определены. Эти фильтры могут быть логически объединены для более сложной фильтрации пакетов, используя фильтры и фильтры и орфильтера. Также можно определить свои собственные фильтры, реализуя этот интерфейс. Пример кода ниже создает тривиальный фильтр для пакетов с определенным идентификатором.
// Use an anonymous inner class to define a packet filter that returns
// all packets that have a packet ID of "RS145".
PacketFilter myFilter = new PacketFilter() {
public boolean accept(Packet packet) {
return "RS145".equals(packet.getPacketID());
}
};
// Create a new packet collector using the filter we created.
PacketCollector myCollector = packetReader.createPacketCollector(myFilter);
Вышеуказанные заявления от Java Doc.