クライアントからデータを受信し、コンソールにログオンしようとしています。ここ は、私がこれを行う方法です。Javaで配列の内容を安全に消去するにはどうしたらいいですか?
private final int MAX_PACKET_SIZE = 1024;
private byte[] data = new byte[MAX_PACKET_SIZE];
private void receive() {
new Thread(() -> {
while (running) {
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
sPort = packet.getPort();
ip = packet.getAddress();
address = ip.toString();
} catch (Exception e) {
e.printStackTrace();
}
String messageToPrint = new String(packet.getData());
System.out.println(messageToPrint.trim() + " " + address + " | " + sPort);
}
}).start();
}
それは私のmessageToPrint
それは実際に最後の1を繰り返し、新規の方でそれを再印刷の印刷に来るとき。
私は問題が何であるかを考え出しました。
ループをwhile
ループ内に配置すると、すべて正常に動作し、以前のメッセージが再び表示されません。 。
私は新しいデータがに来る前に、私の配列をクリアする何とか必要があるので、割り当ては内部良いアイデアではなくループので、私は本当に、これを行うにはしたくない
出力ループ内の割り当てなしでは、次のとおりです。
Console: past message
Console: (imagine i typed hello) hellomessage
など。
'Arrays.fill()'(そうしないと、最後に受信したメッセージの末尾にテキストを含めることができ、アレイ全体を印刷しますか)?しかし、私は新しい配列を割り当てるよりもはるかに速くなるとは思っていません –
わかりませんが、*パケット*をあなたの囲むクラスのフィールドにしようとしましたか? – GhostCat
またはおそらく;これは役に立ちます:http://stackoverflow.com/questions/17549195/clear-datagram-buffer-in-java? – GhostCat