什么';这是java中DatagramPacket.getData().length和DatagramPacket.getLength()之间的区别

什么';这是java中DatagramPacket.getData().length和DatagramPacket.getLength()之间的区别,java,sockets,udp,datagram,Java,Sockets,Udp,Datagram,在下面的代码段中 DatagramPacket rPacket rPacket = new DatagramPacket(new byte[2000], 2000); .. do some socket.receive .. java中DatagramPacket.getData().length和DatagramPacket.getLength()之间的区别是第一个返回用于构造对象的数组的大小,该大小永远不会改变;第二个返回提供给构造函数的长度和最近接收到的最小数据报的实际长度中较小的一个

在下面的代码段中

DatagramPacket rPacket
rPacket  = new DatagramPacket(new byte[2000], 2000);
.. do some socket.receive ..

java中DatagramPacket.getData().length和DatagramPacket.getLength()之间的区别是第一个返回用于构造对象的数组的大小,该大小永远不会改变;第二个返回提供给构造函数的长度和最近接收到的最小数据报的实际长度中较小的一个,该长度在每次接收时都会改变。

来自DatagramPacket类的javadoc

getLength():
返回要发送的数据的长度或数据的长度
已收到。

getData():
返回数据缓冲区。接收到的数据或要发送的数据
从缓冲区中的
偏移量开始,
并运行
length
long.

此外,你还得知道 setData():


构造函数还调用setData()

看看源代码或javadoc…最后一句与第一句相矛盾,应该删除。这是原始的javadoc docu,我看不出有矛盾。请删除否决票,再想想,现在你已经完全重写了答案,这并不矛盾。我已经添加了有关长度的信息,但没有更改原始文本。@AlexWien如果你没有收到,它将返回提供给构造函数的长度。如果有,则返回接收到的长度(如果较小),否则返回提供给构造函数的长度。这就是我所说的最低限度:你的定义可能会有所不同。此外,如果您在不重置的情况下继续接收同一对象,则可接收到的长度将一直缩小到目前为止接收到的最小数据包。我也称之为最小值。
 Set the data buffer for this packet. This sets the
     * data, length and offset of the packet.
     *
     * @param buf the buffer to set for this packet
     *
     * @param offset the offset into the data
     *
     * @param length the length of the data 
     *       and/or the length of the buffer used to receive data
 setData(byte[] buf, int offset, int length)