私は基本的なセーブ/オープニング機能を持つJavaアプリケーションを作っています。保存する必要があるのは、クラスのインスタンスです。ModeleImageシングルトンです。私の保存は明らかに動作し、このように見えます:ObjectInputStreamを使用して既存のSingletonオブジェクトを保存されたファイルから置き換えるにはどうすればよいですか?
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(ModeleImage.getInstance());
outputStream.flush();
outputStream.close();
これでObjectInputStreamでそのファイルを開こうとしています。私は単純に私のシングルトン(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()の仕組みを誤解していますか?
編集:実際に私は私のシリアライゼーションが単に私が保存しようとしているときに動作しないことを知りました。私はテキストエディタで保存したファイルを開こうとしましたが、それは以下で始まります: 'java.io.NotSerializableException' – user1088509
編集2:私のModeleImageクラスでSerializableを実装するのを忘れました。保存されたファイルにはエラーはありませんが、小さな(205バイト)フィールドの名前は含まれていますが、値は含まれていません。フィールドの1つはイメージなので、ファイルはかなり大きいはずです。 – user1088509