2013-05-15 42 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