클라이언트에서 데이터를 수신하고 콘솔에 기록하려고합니다.안전하게 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
를 인쇄하고, 새로운 하나에 그것을 다시 인쇄에 관해서 :이 어떻게 여기 이다.
그래도 문제가 무엇인지 알아 냈습니다.
while
루프 안에 배열 data
을 넣으면 모든 것이 올바르게 작동하고 이전 메시지가 다시 나타나지 않습니다. . 할당 내부 내가 새로운 데이터에 오기 전에 내 배열을 취소 어떻게 든 필요가 너무 좋은 생각을하지 루프 때문에
정말 이렇게하지 않으려는
출력을 루프 내부 할당없이 것은 :
Console: past message
Console: (imagine i typed hello) hellomessage
등등.
'Arrays.fill()'(그렇지 않으면 당신은 마지막으로 수신 한 메시지의 뒤에 텍스트를 포함 할 수있는 전체 배열을 인쇄 할 수 있습니다)? 하지만 새로운 배열을 할당하는 것보다 훨씬 빠르다는 것을 확신하지 못합니다. –
잘 모르겠지만, 패킷을 둘러싸는 클래스의 필드를 만들려고 했습니까? – GhostCat
또는 아마도; 도움이 되나요? http://stackoverflow.com/questions/17549195/clear-datagram-buffer-in-java? – GhostCat