java - 如何在反序列化后初始化我的对象数组

标签 java arrays object deserialization

有两个类 player 和 game。实现序列化和 fileio。序列化工作正常。无法获得对象数组的最大长度。我想要数组中存在的对象数。

class player {
  private String username;
}

class game {
  player array[] = new player[100];
  int arraysize;
  player player;

  public void setArraySize(int arraySize) {
    this.arraySize = arraySize;
  }

  public void readdata() { // reading from file starts
    //ObjectInputStream input = null;
    try {
      ObjectInputStream input = new ObjectInputStream(new FileInputStream("myfile.txt"));
      array = (NimPlayer[]) input.readObject();

    } catch (Exception e) {
      e.printStackTrace();
    }
    initializearraylength(array);
  }// reading file ends

  public void initializearraylength(NimPlayer[] temparray) {
    int size = temparray.length;
    setArraySize(size);
    System.out.println(size); // output displays size 100
  }
}
public display() {
  for (int i = 0; i < arraysize; i++) {
    System.out.println(array[i].getusername());
  }
}

变量 arraySize 没有初始化。我尝试了这段代码,并在 readdata() 的第一行尝试中得到了一个空指针异常。

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at game.readdata(game.java:507)

最佳答案

您的文件是空的。

我不知道你为什么还要有一个 arraySize 变量,如果它总是与 array.length 相同。 只需删除它。如果您保留它,您当然不需要两种方法来设置它。

关于java - 如何在反序列化后初始化我的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419672/

相关文章:

java - 从不同类的数组中获取元素

java - 在 Java 中,如何将包含数组的字符串转换为实际的数组

javascript - 对象数组到以属性为键的对象

java - JNI 返回类型

java - 一种在 TextView 中更改文本时间的方法?

javascript - Date.now() 无法在 Float32Array 中更新

javascript - 如何在本地更改选项对象属性而不全局重新定义它

Java:存储数据库中的信息。哪些 Collection 合适?

java - 无法配置JPA项目

java - 如何从 JSON 对象中获取特定值?