我们如何将GUI类的对象保存(序列化)到Java文件中?

时间:2011-01-07 23:23:37

标签: java user-interface serialization

我在netbeans中有一个GUI类,它从twitter搜索API中检索推文,它包含显示源用户,发布时间,推文文本等的TextAreas,Labels和Editor窗格...... 我想要推文(要保存在文件中,我需要序列化类,所以我可以将整个推文保存为文件中的对象。有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

这听起来像你绝对不应该做的事情。您应该将推文保存在文件中。序列化应该是你最后的度假胜地

答案 1 :(得分:3)

不要存储整个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()); 我们当然允许autoboxing把我们的长期变成Long,所以有一些偷偷摸摸的jdk可能会把它装入Integer而失去一些精确:) 加上对订单对象的更改写入流应该按照它们从流中读取的顺序进行镜像。

无论如何,完成此操作后,您可以将对象写入文件,如此

ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(“blah.bin”)); 简单s = new 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”在db中的文本字段中存储简单bean时,这是一个非常方便的类:)

答案 2 :(得分:0)

正如其他人所建议的那样,序列化数据,而不是GUI对象。

现在:数据本身最有可能是JSON,因此您应该能够使用与解析它相同的工具来编写JSON(希望类似Jackson)。