سؤال

ما هو الفرق بين هاتين الطريقتين:

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.

و PacketFilter هي واجهة تعلن فقط طريقة: قبول.

يوفر PacketListener آلية للاستماع إلى الحزم التي تمرر مرشحًا محددًا. يتيح ذلك البرمجة على غرار الحدث-في كل مرة يتم العثور على حزمة جديدة ، سيتم استدعاء طريقة ProcessPacket (Packet). هذا هو النهج المعاكس للوظائف التي يوفرها حزمة PacketCollector والتي تتيح لك الحظر أثناء انتظار النتائج.

يحدد PacketFilter طريقة لتصفية الحزم لسمات معينة. يتم استخدام مرشحات الحزم عند إنشاء مستمعين أو جامعي الحزم - يحدد المرشح ما هي الحزم التي تتطابق مع معايير المجمع أو المستمع لمزيد من معالجة الحزم.

يتم تعريف العديد من المرشحات المحددة مسبقًا. يمكن دمج هذه المرشحات بشكل منطقي لتصفية الحزم الأكثر تعقيدًا باستخدام مرشحات و Orfilter. من الممكن أيضًا تحديد المرشحات الخاصة بك عن طريق تنفيذ هذه الواجهة. ينشئ مثال الرمز أدناه مرشحًا تافهة للحزم مع معرف محدد.

// 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top