我正在创建一个撤消重做机制。为了实现这一目标,我使用序列化。通过将当前状态写入 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/