java - 对象序列化的魔法仙女

标签 java file object serialization time

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

我有几个关于对象序列化的问题。我正在开发我的数学游戏的新版本,忘记在最后三个 session 中保存游戏模式。记录是通过对象序列化保存的,这使我来到这里。我想知道的是:

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

最佳答案

序列化将整个对象图序列化。如果您正在保存游戏,您可能需要调用 ObjectOutputStream.writeObject(myGame),这将递归地写入整个游戏对象及其引用的所有非 transient 属性。

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

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

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

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

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

关于java - 对象序列化的魔法仙女,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15125336/

相关文章:

c++ - 根据文件中的指令编写一个字符数组

javascript - Angular JS 将对象复制到另一个对象到 for 循环中

java - Hadoop..如何计算输入拆分的散列

java - 如何避免 Spring ConversionService 中的重复转换器?

java - 系统找不到JAR中指定的路径

javascript - 如何在 grandCouncil 数组中获取正确的对象变量名称?

Java判断一个对象是哪个类

java - 如何通过单击 GUI 中的按钮来更改面板的内容?

java - 如何在android中实现searchview过滤器?

c - 打印从文件加载的字符串 (char*),没有转义的特殊序列(如\n)