0
我试过接收带有固定缓冲区大小的数据报包,然后想根据接收包进行调整。我可以得到接收数据包的实际缓冲区大小,但是当我将它写入具有调整大小的另一个缓冲区时,它会再次更改或增大其大小。这怎么可能呢?我期望它抛出数组超出界限的异常。数据报包接收缓冲区大小-java
byte[] recvbuffer=new byte[1024];
byte[] databuf=new byte[k-8];
byte[] checksumbuf=new byte[8];
recvpacket[i]=new DatagramPacket(recvbuffer,recvbuffer.length);
sock.receive(recvpacket[i]);
System.out.println(new String(recvbuffer));//1
int k=recvpacket[i].getLength();//k=28
System.out.println(k);
byte[] buffer=new byte[k];//buffer of size 28
System.out.println(buffer.length);
buffer=recvbuffer;
//buffer=recvpacket[i].getData();
System.out.println(new String(buffer));//buffer of size 1024, but how?
System.out.println(buffer.length);//
我得到的数据包作为数据包的长度。的getLength();但我的问题是,我如何将缓冲区写入到已定义大小的新缓冲区中。我应该写它像byte [] buf = new byte [recvpacket [i] .getLength()+ 1] – Struse
或多或少,除了虚假的+1,但为什么?通常情况下,你会在包数据的周围包装一个'ByteArrayInputStream',并且可能包含一个'DataInputStream',并通过各种形式的'readXXX()'方法获取数据。不需要第二个字节数组。 – EJP