4

我环顾四周,但似乎没有什么能完全涵盖我想做的事情。是否可以在运行时保存Class<?>实例对象?如果是这样,我将如何去做?

4

3 回答 3

3

您是否了解过使用 java进行序列化的概念。此链接将帮助您解决问题。

简而言之, Java.lang.Serializable是您这样做的朋友。

于 2012-05-24T14:10:17.990 回答
2

这是一组关于 Java 序列化的评论,而不是答案。只是其他答案中没有(尚未)的一些信息。

序列化不仅保存一个对象,它还保存它直接和间接引用的所有对象。这真的很酷,但是你可能会写一个小对象,然后发现你意外地创建了一个 10MB 的文件。

如果在您正在编写的对象中存在对不可序列化对象的引用,无论多么间接,则写入将引发异常。

如果您使用的是套接字,请定期重置 ObjectOutput 流。否则,除了第一次之外,每次写入对象时,发送的只是对原始数据的引用。发送具有连续值 1、2、3、4 和 5 的相同对象,读取的对象将具有 1、1、1、1 和 1 的值。此外,如果不重置,内存使用量将飙升,因为 ObjectOutput ObjectInput 会将发送的几乎所有内容保存在内存中。(虽然它只会保留每个不同对象的一份副本。)

如果类在写入和读取之间发生变化,则序列化不起作用。然而,巧妙地使用外部化可以解决这个问题。(如果您的 IDE 会让您忘记,请记住 serialVersionUID。)

外部化使您可以编写代码来序列化一个类。这可能非常有用。您可以输入版本号并检查它们,您可以省略不需要的数据,或者可以在读取期间重新创建数据。不过,它比自动序列化需要更多的工作。

在进行外部化读取时,请注意所有引用都可能引用数据尚未到达的对象;例如,您不能始终如一地从子对象列表中汇总金额。在 readObject 之后调用一个方法来设置需要计算的值可能是值得的。(发送冗余信息通常比重新计算要好。)

我以艰难的方式学到了这一切。

于 2012-05-24T19:05:45.417 回答
1

我从这个网站了解了序列化。它很好地教授了这个概念。我建议从那里开始。

于 2012-05-24T14:16:48.970 回答