packetFilter和accept有什么区别?

时间:2013-11-08 07:31:07

标签: java smack

这两种方法有什么区别:

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);

3 个答案:

答案 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文档。

相关问题