我目前正在整理一个小型客户端/服务器对,但遇到了ArrayLists的问题,我已解决了该问题,但想了解更多信息。这是代码示例:

public double[] receiveMessage(int messageLength) throws IOException {
    // wait for bytes
    while (this.getInputStream().available() == 0) {
    }

    // read bytes
    List<byte[]> incomingMessage = new ArrayList<byte[]>();

    int byteLength = 8;
    byte[] tempByte = new byte[byteLength];
    while (this.getInputStream().available() != 0) {
        this.getInputStream().read(tempByte, 0, byteLength);
        incomingMessage.add(tempByte);
    } ............


如果在每次循环迭代时都打印tempByte,则会收到我期望的唯一数组。但是,如果我要打印完成列表“ incomingMessage”中的每个元素,我将收到相同的数组(最后一个tempByte数组)“ messageLength”次。

当我将tempByte声明放置在while循环中并在将tempByte = null添加到列表后,将其修复。

虽然我不是编程专家,但我看到的原始错误的原因是什么?

最佳答案

您每次都修改相同的byte[]对象。您要在while循环的每次迭代中替换数组的元素,然后调用read

在数组内部声明tempByte可以解决此问题的原因是,您现在在每次迭代期间创建一个新的独立字节数组。现在,您不再添加一个数组,而是添加了多个不同的数组。

关于java - 重复的阵列 list 项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28995533/

10-09 21:00