기본 저장/열기 기능을 가진 Java 응용 프로그램을 만들고 있습니다. 저장해야하는 것은 클래스의 인스턴스입니다. ModeleImage 이것은 싱글 톤입니다. 저의 저축은 다음과 같이 작동합니다 :기존 Singleton 객체를 ObjectInputStream을 사용하여 저장된 파일로 대체하는 방법은 무엇입니까?
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());
는 또한 각 주위에/시도 잡아 넣어. 문제는 애트리뷰트를 대체하려고 할 때 내 오프닝 파트가 IOException을 잡는다는 것이다.
ModeleImage.getInstance().setImage(((ModeleImage) ois.readObject()).getImage());
//This catches an IOException
내가 뭘 잘못하고 있니? 그것은 Singleton이거나 ObjectInputStream 및 readObject()가 어떻게 작동하는지 오해하기 때문입니까?
편집 : 실제로 방금 저장을 시도 할 때 직렬화가 작동하지 않는다는 것을 알았습니다. 내가 저장 한 파일을 텍스트 편집기로 열려고 시도한 후 다음과 같이 시작합니다 : 'java.io.NotSerializableException' – user1088509
편집 2 : 내 ModeleImage 클래스에서 Serializable을 구현하는 것을 잊었습니다. 이제 저장된 파일에는 오류가 없지만 작은 (205 바이트) 필드의 이름은 있지만 값은 포함하지 않습니다. 필드 중 하나는 이미지이므로 파일은 꽤 커야합니다. – user1088509