2013-05-15 43 views
2

我正试图让我的程序保存用户输入的数据。目前,我得到一个:使用可序列化保存信息

java.io.NotSerializableException: java.awt.image.BufferedImage error 

现在,我所做的是我的用户界面类实现的FileWriter,并通过检查文本文件,它似乎正在尝试进行的所有信息保存有关文本框和标签,我已经在我的用户界面上实现。在我的主要类中,我的UI基于,有一个ArrayList,它包含我的项目的对象。我需要序列化这些对象,但它们包含一个BufferedImage。我想我已经找到了解决BufferedImage错误的方法,但我不希望整个UI被序列化。

所以我的问题是,我应该将序列化方法移入包含对象的ArrayList的类中,以便UI不会被序列化?

+0

坦白定制系列化,你应该避免序列化的对象。序列化仅用于对象的短期(分钟)存储,通常用于传输到其他JVM。相反,你应该使用类似XML的东西,可能是JAXB – MadProgrammer

+0

你可以控制你的序列化,就像@Andrew暗示的那样。你也可以使用'瞬变',因为它适合。 – rimero

+0

@MadProgrammer如果我应该避免序列化对象,那么你会如何建议我将我的信息写入xml? JAXB到底是什么? – tmaxxcar

回答

3

标记缓冲图像字段与transient关键字,它指示一个字段不应被序列化。

class A { 
    transient BufferedImage bufferedImage; 
    ... 

,那么你可以通过实现类中的下列方法的

private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ 
    s.defaultWriteObject(); 
    // extract bytes from bufferedImage and write them 
    ... 

private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { 
    s.defaultReadObject(); 
    // read bytes and re-create bufferedImage 
    ... 
+0

因此,我使BufferedImage瞬变,然后我可以解析图像到一个字节数组,并存储? – tmaxxcar

+0

是的,你可以,你需要找到一个很好的例子,如何自定义序列化 –

+0

我想我找到了设在这里的好例子[链接](http://stackoverflow.com/questions/15058663/how-to-serialize-an -object-that-includes-bufferedimages) – tmaxxcar

1

..我应该移动序列化方法..以便UI不会被序列化吗?

是。应该序列化只有特别需要序列化的东西。

+0

好吧,那么我应该将它移入包含我的ArrayList的类中,因为我只想序列化它。 – tmaxxcar