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

2022-09-02 13:59:57
byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(dpr);

在之后,将和永远是一样的?receivedpr.getData()r

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

测试它,表明它是相同的,但这总是得到保证吗?


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

那应该是sock.receive(dpr);

收到后,dpr.getData() & r 会始终保持不变吗?

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

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

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


答案 2

推荐