2016-06-01 76 views
15
byte [] r = new byte[4096]; 
DatagramPacket dpr = new DatagramPacket(r, r.length); 
sock.receive(r); 

receive後,將dpr.getData() & r永遠是一樣的嗎?DatagramPacket - 將getData始終返回傳遞的相同緩衝區?

例如:我可以直接使用字節數組r還是需要調用getData()來再次檢索緩衝區?

測試它,顯示它是相同的,但是這總是保證嗎?

回答

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

這應該是sock.receive(dpr);

接收後,將dpr.getData()& R請始終是一樣的嗎?

是的。 r作爲'用於保存傳入數據報的緩衝區'提供給構造函數,並且getData()'返回用於接收或發送數據的緩衝區'。

即我可以直接使用字節數組r或我是否需要調用getData()來再次檢索緩衝區?

您可以使用字節數組,但爲什麼?使用getData()像其他人一樣,不要忘記也用getOffset()getLength(),而不是假設填補了字節數組數據報:例如,System.out.println(new String(datagram.getData(), datagram.getOffset(), datagram.getLength()));

+0

爲什麼會有史以來的getOffset比0其他什麼嗎? – user93353

+0

在你的情況下,它將是0,但還有其他構造函數,其中的字節數組與偏移量一起傳遞。在這種情況下,將使用構造函數中給出的偏移量。你應該調用getOffset來保護你的代碼免受意外的驚喜,如果有人在將來改變對構造函數的調用。 – user2612030

相關問題