2013-05-15 3 views
2

Я пытаюсь заставить мою программу сохранять данные, введенные пользователем. В настоящее время я получаю:Сохранение информации с помощью Serializable

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

Теперь, что я сделал это реализовать FileWriter в моем классе пользовательского интерфейса, а также путем анализа в текстовый файл оказывается он пытается сохранить всю информацию о тексте ящики и надписи, которые я реализовал в своем пользовательском интерфейсе. В моем основном классе, на котором основан мой интерфейс, есть ArrayList, который содержит объекты моего проекта. Мне нужно сериализовать эти объекты, но они содержат BufferedImage. Я думаю, что нашел способ обойти ошибку BufferedImage, но я не хочу, чтобы весь пользовательский интерфейс был сериализован.

Итак, мой вопрос: должен ли я перенести метод сериализации в класс, содержащий мой объект ArrayList, чтобы пользовательский интерфейс не был сериализован?

+0

Честно говоря, вы должны избегать serialising объектов. Сериализация предназначена только для краткосрочных (мин) хранения объектов, как правило, для передачи на другие JVM. Вместо этого вы должны использовать что-то вроде XML, возможно, JAXB – MadProgrammer

+0

. Вы можете контролировать, что вы сериализуете, как это подразумевает @Andrew. Вы также можете использовать «переходные процессы», как он подходит. – rimero

+0

@MadProgrammer Если мне не нужно сериализовывать объекты, тогда как бы вы предложили мне написать свою информацию в xml? и что такое JAXB? – tmaxxcar

ответ

3

Mark BufferedImage поля с ключевым словом 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 -объект-что-включает-bufferedimages) – tmaxxcar

1

.. Я должен переместить метод сериализации .. чтобы пользовательский интерфейс не был сериализован?

Да. Нужно сериализовать только те вещи, которые требуют сериализации.

+0

ok, тогда я должен переместить его в класс, содержащий мой ArrayList, поскольку я хочу только сериализовать это. – tmaxxcar

Смежные вопросы