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