Java:序列化:如何仅存储引用,而不存储内容

标签 java serialization

我正在创建一个撤消重做机制。为了实现这一目标,我使用序列化。通过将当前状态写入 ByteArrayOutputStream、使用 ObjectOutputStream 并将 byte[] 放入 ArrayList 来记录当前状态。

但问题是,某些类持有对 BufferedImage 的引用/指针。由于它的大小,我不想序列化它(并且它没有实现 Serialized)。之所以不想写,是因为它永远不会改变。 但该类的每个实例都有不同的图像,因此 static 关键字不是解决方案。

我尝试解决的问题:

public transient BufferedImage img;

这会导致ObjectOutputStream不会序列化BufferedImage,但也不会存储引用。反序列化后,将为null

所以,简而言之,我想保留对对象的引用,而不是对象本身。这意味着,反序列化后我将能够使用 BufferedImage(因为它不会被垃圾收集器删除)。

非常感谢。

最佳答案

好的,很简单,保留 Map<String, BufferedImage>对于应用程序中某处的所有图像,让每个类序列化其图像的 key 。并在 readResolve()方法,从 map 上查找图像。

关于Java:序列化:如何仅存储引用,而不存储内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6549756/

相关文章:

java - 如何将数据传递到线程 System.in 以及如何从线程 System.out 获取数据?

java - 验证简单的时间日期格式 ? (yyyy-MM-dd'T'HH :mm:ss)

Java:为什么我的break语句不起作用?

java - Java 中的 serialPersistentFields

php - 什么样的序列化使用PHP函数session_set_save_handler的write函数?

c# - 不可打印字符的序列化

java.io.StreamCorruptedException : invalid type code: 4C - replicationstream tomcat

java - 创建 stub 登录页面

java - tomcat 启动失败 : SEVERE: Error starting static Resources

python - 在保存之前编辑 django-rest-framework 序列化程序对象