Tôi đang cố gắng nhận dữ liệu từ một khách hàng và sau đó đăng nhập vào bảng điều khiển. Dưới đây là làm thế nào tôi làm điều này:Làm thế nào để xóa nội dung của một mảng trong Java với an toàn?
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();
}
Khi nói đến in messageToPrint
của tôi nó thực sự lặp đi lặp lại người cuối cùng, và in lại nó bằng một cái mới hơn.
Tôi đã tìm ra vấn đề là gì.
Nếu tôi đặt phân bổ mảng data
bên trong vòng lặp while
, mọi thứ hoạt động tốt và tôi không nhận lại tin nhắn trước đó, chỉ một tin nhắn hiện tại. .
tôi không thực sự muốn làm điều này, bởi vì phân bổ trong vòng không phải là một ý tưởng tốt vì vậy tôi cần phải bằng cách nào đó để xóa mảng của tôi trước khi dữ liệu mới do thỏa thuận hợp
Sản lượng mà không phân bổ bên trong vòng lặp là:
Console: past message
Console: (imagine i typed hello) hellomessage
v.v.
'Arrays.fill() '? Nhưng tôi nghi ngờ rằng sẽ nhanh hơn nhiều so với phân bổ một mảng mới –
Không chắc chắn ... nhưng bạn cũng đã cố gắng để làm cho * gói * một lĩnh vực của lớp bao quanh của bạn? – GhostCat
Hoặc có thể; điều này có giúp được không: http://stackoverflow.com/questions/17549195/clear-datagram-buffer-in-java? – GhostCat