这两种方法有什么区别:
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);
答案 0 :(得分:1)
似乎很清楚。 PacketFilter
过滤数据包以供PacketListener.
答案 1 :(得分:0)
如您所知,在PacketListener之前使用PacketFilter来过滤匹配类型的数据包数据。 只有满足PacketFilter的数据包才能进入PacketListener处理。
PacketFilter是仅声明方法的接口:接受。
答案 2 :(得分:0)
PacketListener提供一种机制来侦听通过指定过滤器的数据包。 这样可以进行事件样式的编程-每当发现新数据包时, 将调用processPacket(Packet)方法。这是 PacketCollector提供的功能的相反方法 这样一来,您就可以在等待结果时进行屏蔽。
PacketFilter定义一种过滤特定属性的数据包的方法。数据包过滤器在构造数据包侦听器或收集器时使用-过滤器定义哪些数据包符合收集器或侦听器的条件以进一步 数据包处理。
定义了几个预定义的过滤器。这些过滤器可以逻辑组合 通过使用AndFilter和OrFilter过滤器进行更复杂的数据包过滤。也可以通过实现此接口来定义自己的过滤器。下面的代码示例为具有特定ID的数据包创建了简单过滤器。
// 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文档。