2016-06-01 15 views

Antwort

6
byte [] r = new byte[4096]; 
DatagramPacket dpr = new DatagramPacket(r, r.length); 
sock.receive(r); 

Das sock.receive(dpr);

Nachdem die erhalten wird dpr.getData() & r immer gleich sein sollte?

Ja. r wurde dem Konstruktor als "der Puffer zum Speichern des eingehenden Datagramms" und getData() "gibt den Puffer zum Empfangen oder Senden von Daten" zurück.

d. Kann ich das Byte-Array direkt verwenden r oder muss ich getData() aufrufen, um den Puffer erneut abzurufen?

Sie können das Byte-Array verwenden, aber warum? Verwenden Sie getData() wie alle anderen auch, nicht zu vergessen, auch getOffset() und getLength() zu verwenden, anstatt das Datagramm das Byte-Array gefüllt angenommen: zum Beispiel System.out.println(new String(datagram.getData(), datagram.getOffset(), datagram.getLength()));

+0

Warum sollte getOffset jemals etwas anderes als 0 sein? – user93353

+0

In Ihrem Fall ist es 0, aber es gibt andere Konstruktoren, wo das Byte-Array zusammen mit einem Offset übergeben wird. In diesem Fall wird der im Konstruktor angegebene Offset verwendet. Sie sollten getOffset aufrufen, um Ihren Code vor bösen Überraschungen zu schützen, wenn jemand den Aufruf des Konstruktors in der Zukunft ändert. – user2612030