对象序列化的魔仙

时间:2013-02-28 00:33:12

标签: java file object serialization time

System.out.println("Hello brave souls!");

我有一些关于对象序列化的问题。我正在研究我的数学游戏的新版本,并忘了让它在最后三个会话中保存游戏模式。记录正在通过对象序列化保存,这引导我到这里。我想知道的是:

1。)对象序列化是否以某种方式保持对象保存到文件的时间? 2.)在更改文件中的任何n个对象时,是否必须将要更改的对象加载到内存中(通过循环遍历对象),更改它,然后将每个最后的FREAKING OBJECT重写为文件? //似乎乏味

2 个答案:

答案 0 :(得分:3)

序列化序列化整个对象图。如果要保存游戏,您可能需要调用ObjectOutputStream.writeObject(myGame),它将以递归方式写入整个游戏对象及其引用的所有非瞬态属性。

要更改它,请使用ObjectInputStream将游戏加载到内存中,更改值并将其写回。

如果处理大量数据,您可能还想链接GZIPInputStream和GZIPOutputStream,它可以缩小序列化大小。

如果您正在处理非常大的对象,那么嵌入式数据库可能是更好的选择,因为您可以更改单个字段而无需将整个内容加载到RAM中。

最后,如果要在序列化时更新对象的时间戳,请在Serializable伪接口中实现writeObject方法。更新时间戳,然后在提供的ObjectOutputStream上调用defaultWriteObject。这将给你“最后一次坚持”的行为。

private void writeObject(java.io.ObjectOutputStream out) throws IOException

答案 1 :(得分:1)

  

1。)对象序列化是否会以某种方式保留对象保存到文件的时间?

没有。它保存对象,只保存对象,以及重建它所需的任何内容,例如类名。

  

2。)更改文件中的n个对象

您无法更改文件中的任何 N 对象。您必须将文件重新构建为对象,更改对象并重新序列化。

  

//似乎很乏味

这很乏味。没有人说这不会很乏味。您正在将其用作数据库。事实并非如此。它是一个序列化,也暗示它是一个流。完全相同的情况适用于文本文件。