Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DatagramPacket-getData是否总是返回传递的相同缓冲区?_Java_Sockets_Udp_Datagram - Fatal编程技术网

Java DatagramPacket-getData是否总是返回传递的相同缓冲区?

Java DatagramPacket-getData是否总是返回传递的相同缓冲区?,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,在接收后,dpr.getData()和r是否始终相同 例如:我可以直接使用字节数组r,还是需要调用getData()再次检索缓冲区 测试它,表明它是一样的,但这总是保证吗 byte [] r = new byte[4096]; DatagramPacket dpr = new DatagramPacket(r, r.length); sock.receive(dpr); 应该是sock.receive(dpr) 接收后,dpr.getData()&r是否始终相同 对r作为“保存传入数据报的缓冲

接收
后,
dpr.getData()
r
是否始终相同

例如:我可以直接使用字节数组
r
,还是需要调用
getData()
再次检索缓冲区

测试它,表明它是一样的,但这总是保证吗

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

接收后,dpr.getData()&r是否始终相同

r
作为“保存传入数据报的缓冲区”提供给构造函数,
getData()
“返回用于接收或发送数据的缓冲区”

i、 e.我可以直接使用字节数组r还是需要调用getData()再次检索缓冲区


可以使用字节数组,但为什么?像其他人一样使用
getData()
,不要忘记也使用
getOffset()
getLength()
,而不要假设数据报填充了字节数组:例如,
System.out.println(新字符串(datagram.getData(),datagram.getOffset(),datagram.getLength())

为什么getOffset不是0?在您的例子中,它将是0,但是还有其他构造函数,其中字节数组与偏移一起传递。在这种情况下,将使用构造函数中给定的偏移量。如果将来有人更改对构造函数的调用,您应该调用getOffset来保护代码不受意外情况的影响。
byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);