是否可以保存Java Class <! - ? - >文件?

时间:2012-05-24 14:08:07

标签: java class serialization

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

3 个答案:

答案 0 :(得分:3)

您是否使用过java的序列化概念this link会帮助您解决问题。

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

答案 1 :(得分:2)

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

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

如果对你正在编写的对象中的非序列化对象有一个引用(无论是间接的),写入将抛出异常。

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

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

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

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

我很难学到这一切。

答案 2 :(得分:1)

我从Serialization了解了this website。它很好地教导了这个概念。我建议从那里开始。

相关问题