Как сохранить (сериализовать) объект класса GUI в файл в Java? - PullRequest
2 голосов
/ 08 января 2011

У меня есть класс GUI в NetBeans, который извлекает твиты из API-интерфейса поиска в Twitter, он содержит панели TextAreas, Labels и Editor, в которых отображается исходный пользователь, время публикации, текст в твиттере и т. Д. Я хочу, чтобы твиты (были сохранены в файле, и мне нужно сериализовать класс, чтобы я мог сохранить весь твит как объект в файле. Любая помощь?

Ответы [ 3 ]

3 голосов
/ 08 января 2011

Не храните весь объект GUI, так как будет много вещей, связанных с элементами управления, которые вам не нужны.Вместо этого создайте собственный сериализатор, звучит впечатляюще, но на самом деле очень просто.

Возьмите этот простой пример, у класса есть фрейм с именем пользователя вверху, это не сериализуется как деталь для его создания.это просто имя, поэтому не нужно хранить остальную часть объекта JFrame.Другие детали - это простые свойства, которые можно сериализовать.

public class Simple implements Serializable {

    private transient JFrame win;
    private String username;
    private Date postTime;
    //...assume getters/setters constructors e.t.c.
    private void writeObject( ObjectOutputStream out ) throws IOException {
        out.write( this );
        out.flush();
    }
    private Object readObject( ObjectInputStream in ) throws IOException, ClassNotFoundException {
        Simple s = (Simple) in.read();
        s.setWin( new JFrame( s.getUsername() ) );
        //...any other extra setup can be done here
        return s;
    }

}

Как вы можете видеть, я пытался упростить ситуацию, обратите внимание, я только что написал это, так что еще не пробовал, это скорее"стартер на 10", чем полное решение.Вы можете настроить сериализацию, например, вы можете отправить Long длинному потоку вместо завершенного объекта Date, т.е. выходные данные могли быть out.write (username);out.write (postTime.getTime ());мы, конечно же, разрешаем автоматическую коробку, чтобы позаботиться о том, чтобы превратить нашу длинную в длинную, поэтому есть вероятность, что какой-то хитрый jdk может вместо этого поместить его в целое число и потерять некоторую точность :) плюс изменения в объектах порядка записываются в потокдолжно быть отражено в порядке их чтения из потока.

В любом случае, когда это будет сделано, вы можете записать объекты в файл следующим образом:

ObjectOutputStream oout = new ObjectOutputStream (new FileOutputStream ("blah.bin "));Simple s = новый Simple ();//... установить некоторые значения в s oout.writeObject (s);oout.flush ();oout.close ();ObjectInputStream oin = new ObjectInputStream (new FileInputStream ("blah.bin"));Простой простой = (Простой) oin.readObject ();oin.close ();

, очевидно, я не включил массу дополнительного синтаксиса, необходимого для обработки исключений и эффективного использования потока, но это всего лишь несколько идей.

Если это не такЕсли хотите, тогда вы всегда можете попробовать использовать граф объектов в сериализаторе xml, это очень удобно."java.beans.XMLEncoder" это был очень удобный класс для хранения простых bean-компонентов в текстовых полях в db:)

3 голосов
/ 08 января 2011

Звучит так, как будто вы определенно не должны делать.Вместо этого вы должны просто сохранить твиты в файле.Сериализация должна быть вашим последним курортом

0 голосов
/ 08 января 2011

Как и предполагали другие, сериализуйте данные, а не объекты GUI.

Теперь: данные, скорее всего, поступают как JSON, так что вы можете просто записать этот JSON, используя тот же инструмент, что и для его анализа (возможно, что-то вроде Джексон ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...