0

这两种方法有什么区别:

进程包:

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

3 回答 3

1

似乎很清楚。PacketFilter过滤数据包以供处理PacketListener.

于 2013-11-08T07:44:53.793 回答
0

如您所见,PacketFilter 是在 PacketListener 之前使用的,用于过滤匹配类型的数据包数据。只有满足 PacketFilter 的数据包才能进入 PacketListener 处理。

而 PacketFilter 是一个只声明一个方法的接口:accept。

于 2018-06-28T02:47:01.203 回答
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 doc。

于 2018-06-28T16:08:17.987 回答