我正在制作一个具有基本保存/打开功能的 Java 应用程序。我需要保存的只是我的类ModeleImage的实例,它是一个 Singleton。我的储蓄显然有效,看起来像这样:
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(ModeleImage.getInstance());
outputStream.flush();
outputStream.close();
现在我正在尝试使用 ObjectInputStream 打开该文件。我不确定是否有办法简单地将我的 Singleton (ModeleImage) 替换为保存的,但现在我只是尝试复制和替换每个属性。我的开场白是这样的:
FileInputStream fis = new FileInputStream(fileChooser.getSelectedFile());
ObjectInputStream ois = new ObjectInputStream(fis);
//Get each attribute from the file and set them in my existing ModeleImage Singleton
ModeleImage.getInstance().setImage(((ModeleImage) ois.readObject()).getImage());
ModeleImage.getInstance().setLargeurImage(((ModeleImage) ois.readObject()).getLargeurImage());
ModeleImage.getInstance().setHauteurImage(((ModeleImage) ois.readObject()).getHauteurImage());
ModeleImage.getInstance().setxImage(((ModeleImage) ois.readObject()).getxImage());
ModeleImage.getInstance().setyImage(((ModeleImage) ois.readObject()).getyImage());
我也把 try/catch 放在每一个周围。问题是我的开头部分在尝试替换属性时捕获了 IOException。
ModeleImage.getInstance().setImage(((ModeleImage) ois.readObject()).getImage());
//This catches an IOException
我究竟做错了什么?是因为它是单例还是我误解了 ObjectInputStream 和 readObject() 的工作原理?