JavaRush /Java 博客 /Random-ZH /接口 - 标记
dupliaka
第 29 级
Санкт-Петербург

接口 - 标记

已在 Random-ZH 群组中发布
标记接口是一种具有运行时类型检查的设计模式,允许您将接口和类关联起来。要理解为什么这可能是必要的,请考虑使用标记来标记 Serializible 类的示例。假设我们需要将对象的状态保存在内存中,然后还能够解密我们保存的内容。然后,你说,我们可以将对象转换为一组位。正确的。我们可以使用 FileInputStream 来使用一种简单的方式写入文件,但这仅在对象很少的情况下才方便,但是如果对象很多怎么办?有一个很棒的序列化工具可以实现这一点。使用它时的主要规则是被序列化的对象必须包含所有数据并且不引用其他对象。看看你的类“啊哈,字段没有被引用,最好放置可序列化标记。” 当你放置它时,就意味着你标记的对象可以写入ObjectOutputStream。ObjectOutputStream 类有一个 writeObject0() 方法,它包含 instanceof 检查,检查对象是否可以写入,如果整个系列检查失败,则抛出 NotSerializedException 异常,如果没有,则所有内容都会整齐地写入内存。让我们创建一个 BigObject 类,我们将序列化它的实例。BigObject package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } } 类已经被标记为可序列化。它有一个 id 字段和附带的 get/set 方法。 package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }

记录物体

首先,我们创建一个可序列化类 BigObject 的对象,然后为它准备一个数据缓冲区 - 我们将在其中放置所有弓 ByteArrayOutputStream。然后我们准备已经提到的ObjectOutputStream并将缓冲区传递给它,将对象写入流并关闭它。

读取对象

我们准备一个写缓冲区readBuffer,传入inputStream,读取readObject()。该对象现已恢复。由于“id”字段不是链接,我们能够标记 Serialized 类,该类完全包含其数据。令牌允许我们简化类验证的过程,而不是在类中添加验证函数。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION