DatagramPacket - getData总是会返回相同的缓冲区吗?

use*_*353 17 java sockets udp datagram

byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);
Run Code Online (Sandbox Code Playgroud)

之后receive,将dpr.getData()&r永远是一样的吗?

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

测试它,显示它是相同的,但这是否始终保证?

use*_*421 8

byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);
Run Code Online (Sandbox Code Playgroud)

那应该是 sock.receive(dpr);

收到之后,dpr.getData()&r总是一样吗?

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

即我可以直接使用字节数组r还是需要调用getData()来再次检索缓冲区?

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