Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中安全地擦除数组的内容?_Java - Fatal编程技术网

如何在Java中安全地擦除数组的内容?

如何在Java中安全地擦除数组的内容?,java,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 Datagra

我正在尝试从客户端接收数据,然后将其登录到控制台。 我是这样做的:

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
循环中,一切正常,我不会再收到上一条消息,只收到当前消息

我真的不想这样做,因为在循环内分配不是一个好主意,所以我需要在新数据到来之前清除数组

循环内未分配的输出为:

Console: past message

Console: (imagine i typed hello) hellomessage

依此类推。

在循环外部创建数据包,并从数据包中检索大小数据。(否则,您将打印整个数组,其中可能包含最后收到的消息的尾随文本)


Arrays.fill()
?但我怀疑这会比分配新阵列快得多不确定。。。但你们是否也试着让包成为你们封闭类的一个字段呢;这有帮助吗:?@GhostCat的观点很好,似乎我就是这么做的。然后,我自由地接受了flikes的回答;也许,如果你想对我最初的建议给出的其他答案投赞成票;-)但op问题的真正原因是什么?为什么这能解决问题?它是如何工作的?
final DatagramPacket packet = new DatagramPacket(data, data.length);
while (running) {
    try {
        socket.receive(packet);
        ...
    final String messageToPrint = new String(
            packet.getData(), 
            packet.getOffset(), 
            packet.getLength());
    ...