我的问题是我真的不知道为什么该对象没有保存在我的班级中,我正在为Semestral项目中的Java编程做一些小型恒星管理程序。所以我的问题是为什么当对象正确反序列化但不保存在字段中时。目标文件中的字段是否有可能为空?
private void setConstellation(Constellation constellation) {
Object obj;
File constellationFile = new File("src\\Constellations\\" + constellation.getNazwa() + ".obj");
boolean constellationExist = constellationFile.exists();
if(constellationExist == true) {
try {
ObjectInputStream loadStream = new ObjectInputStream(new FileInputStream("src\\Constellations\\" + constellation.getNazwa() + ".obj"));
while ((obj = loadStream.readObject()) != null) {
if (obj instanceof Constellation && ((Constellation) obj).getNazwa().equals(constellation.getNazwa())) {
this.constellation = constellation;
}
}
} catch (EOFException ex) {
System.out.println("End of file");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
else if(constellationExist == false){
try{
ObjectOutputStream saveStream = new ObjectOutputStream(new FileOutputStream("src\\Constellations\\" + constellation.getNazwa() + ".obj"));
saveStream.writeObject(constellation);
this.constellation = constellation;
}
catch (IOException e){
e.printStackTrace();
}
}
}
在调试程序的这一部分时,如果不进行事件检查,则首先进入while循环:/
你能以某种方式帮助我吗?
最佳答案
写入对象后,应调用saveStream.close()
以确保正确刷新了流。
您还应该关闭loadStream
。
如果您使用的是Java 7或更高版本,则可以使用try-with-resources:
try (ObjectOutputStream saveStream = new ObjectOutputStream(
new FileOutputStream("src\\Constellations\\" +
constellation.getNazwa() + ".obj"))) {
saveStream.writeObject(constellation);
this.constellation = constellation;
} catch (IOException e){
e.printStackTrace();
}
此构造可确保在退出
try
块时关闭流。关于java - 从目标文件到字段反序列化的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59264943/