明らかなようです。 PacketFilter
処理用のフィルターパケット PacketListener.
質問
これら2つの方法の違いは何ですか:
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(パケット)メソッドが呼び出されます。これは、結果を待っている間にブロックできる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からのものです。