利用ByteArray.writeObject可以把对象以AMF方式序列化。 3、但是,直接把两个MovieClip序列化,得到的ByteArray肯定不一样,因为毕竟有动态的变量值,例如x/y等。...4、那么如果不直接对MovieClip本身writeObject,而是对它的子元件writeObject呢?...再结合ByteArray.writeObject就可以轻松比较到两个Shape是否一致了。 6、利用上边Shape的思维,对MovieClip也做一样的处理。...每帧获取graphics数据,writeObject到ByteArray中。最后做比较。...var shapeB:Shape = b as Shape; byteArrayA.writeObject
(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348...()方法,这样一来,序列化的时候调用的就是writeObject(),而不是java.io.ObjectOutputStream.defaultWriteObject()。...下面的源码是ObjectInputStream.writeObject(Object obj),里面底层其实会有反射的方式调用到重写的对象的writeObject()方法,这里不做展开。...public final void writeObject(Object obj) throws IOException { // 如果可以被重写,那么就会调用重写的方法...这里不写入score */ out.writeObject(age); out.writeObject(name); out.writeObject
writeObject和readObject方法 在ArrayList中定义了来个方法: writeObject 和 readObject 。...这里先给出结论: 在序列化过程中,如果被序列化的类中定义了writeObject 和 readObject 方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化...为了节省篇幅,这里给出ObjectOutputStream的writeObject的调用栈: writeObject — writeObject0 —writeOrdinaryObject—writeSerialData—invokeWriteObject...中定义的writeObject方法。...其实这个问题也很好回答,我们再回到刚刚ObjectOutputStream的writeObject的调用栈: writeObject — writeObject0 —writeOrdinaryObject—writeSerialData—invokeWriteObject
writeObject和readObject方法 在ArrayList中定义了来个方法: writeObject和readObject。...这里先给出结论: 在序列化过程中,如果被序列化的类中定义了writeObject 和 readObject 方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化...为了节省篇幅,这里给出ObjectOutputStream的writeObject的调用栈: writeObject ---> writeObject0 --->writeOrdinaryObject-...中定义的writeObject方法。...其实这个问题也很好回答,我们再回到刚刚ObjectOutputStream的writeObject的调用栈: writeObject ---> writeObject0 --->writeOrdinaryObject
(ObjectOutputStream.java:1174) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346...) at Serializations.serialize(Serializations.java:26) at WriteObject.main(WriteObject.java:13) ...writeObject 方法负责写入特定类的对象的状态,以便相应的 readObject 方法可以还原它。...所以,我们可以在Name类中加入如下方法: private void writeObject(java.io.ObjectOutputStream out) throws IOException...运行WriteObject和ReadObject,序列化和反序列化成功。这两个方法如何实现取决于最终的需求,上面的例子是我想的一个比较符合应用场景的实例。
实现序列化 ObjectInputStream#readObject方法实现反序列化 序列化底层实现分析 writeObject(Object) FAQ ---- what 把Java对象转换为字节序列的过程...---- writeObject(Object) 序列化的方法就是writeObject, debug下 writeObject直接调用的就是writeObject0()方法 public final...void writeObject(Object obj) throws IOException { .........writeObject0(obj, false); ...... } private void writeObject0(Object obj, boolean unshared)...//递归调用writeObject0()方法,写入对应的数据 writeObject0(objVals[i], fields
序列化和反序列化结果 这是最简单的一种方式,因为这种方式让序列化机制看起来很方便(然后,我们在进行对象序列化时,只需要使用ObjectOutputStream和ObjectInputStream的writeObject...第三种 实现Serializable接口,在该实现类中再增加writeObject方法和readObject方法。...修饰的成员变量,static的和transient的变量则用stream.writeObject(object)显式序列化。...在序列化输出的时候,writeObject(object)会检查object参数,如果object拥有自己的writeObject()方法,那么就会使用它自己的writeObject()方法进行序列化。...如果object参数没有writeObject()方法,在readObject方法中就不能调用stream.readObject(),否则会报错。 例如: ? 序列化举例
二、部分属性序列化 如果只想将部分属性进行序列化,可以采用如下几种方法: 使用transient关键字 添加writeObject和readObject方法 使用Externalizable实现 2.1...和readObject方法 另外,我们也可以采用编写私有方法writeObject和readObject,完成部分属性的序列化。...修改Book类,增加writeObject 和 readObject方法,如: public class Book implements Serializable { private static...和readObject是private的且是void的~ Java调用ObjectOutputStream类检查其是否有私有的,无返回值的writeObject方法,如果有,其会委托该方法进行对象序列化...writeObjectMethod = getPrivateMethod(cl, "writeObject", new Class<?
2、调用writeObject() 方法。 writeObjectOverride() 方法 ? 通过源码发现这个方法是个空方法,这是搞什么鬼?...writeObject0方法 ? 在 writeObject0() 方法中,跳过一些检查操作,直接分析最核心的这段代码。...1、判断该类是否定义了 writeObject() 方法,如果定义了,则通过反射调用该对象的 writeObject() 方法,执行我们自己定义的序列化规则。...2、没有定义writeObject() 方法,则调用 defaultWriteFields() 方法执行默认的序列化规则。...我们平常在重写 writeObject() 方法的时候一般也会先调用 defaultWriteFields() 方法的,然后在写上其它特殊的序列化。
new User(); user1.setUserName("zhangsan"); user1.setPassword("123456"); oos.writeObject...(this.userName); out.writeObject(this.password); } @Override public void readExternal...(this.userName); out.writeObject("externalizable:"+this.password); } @Override public...在 readObject 和 writeObject 方法中实现了序列化和发序列化。 在 readExternal 和 writeExternal 方法中也实现了序列化和发序列化。...(this.userName); out.writeObject("externalizable:"+this.password); } @Override public
@Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject...(name); out.writeObject(age); } @Override public void readExternal(ObjectInput in...(); readObject(); } //序列化 public static void writeObject() throws Exception {... list = new ArrayList(); list.add(zhuxi); list.add(xiongfei); oos.writeObject...(name); out.writeObject(age); } @Override public void readExternal(ObjectInput in
2、如何实现序列化 2.1、使用到JDK中关键类 ObjectOutputStream 和ObjectInputStream ObjectOutputStream 类中:通过使用writeObject...2.3.2 第二种写入方式: 在Student 类中实现writeObject()和readObject()方法: private void writeObject(ObjectOutputStream...(name); out.writeObject(id); } @Override public void readExternal(ObjectInput in...()和readObject()方法 2.2 通过在序列化对象中实现writeObject()和readObject()方法,传入ObjectOutputStream和ObjectInputStream对象...我们可以通过上述序列化方法中的 实现writeObject 和readObject 方法,在方法中调用输出流或输入流的writeUTF()和readUTF()方法。
序列化步骤: 步骤一:创建一个ObjectOutputStream输出流; 步骤二:调用ObjectOutputStream对象的writeObject输出可序列化对象。...(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348...(t1); oos.writeObject(t2); oos.writeObject(person); oos.writeObject...如果writeObject使用某种规则序列化,则相应的readObject需要相反的规则反序列化,以便能正确反序列化出对象。这里展示对名字进行反转加密。...更彻底的自定义序列化 writeReplace:在序列化时,会先调用此方法,再调用writeObject方法。
writeObject和readObject方法 在ArrayList中定义了来个方法:writeObject和readObject。...这里先给出结论: 在序列化过程中,如果被序列化的类中定义了writeObject 和 readObject 方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化...为了节省篇幅,这里给出ObjectOutputStream的writeObject的调用栈: writeObject ---> writeObject0 --->writeOrdinaryObject-...中定义的writeObject方法。...其实这个问题也很好回答,我们再回到刚刚ObjectOutputStream的writeObject的调用栈: writeObject ---> writeObject0 --->writeOrdinaryObject
ObjectOutputStream调用对象的writeObject(ObjectOutputStream out)的方法进行序列化。...但实际上根据我们上面的第二条原则,知道因为其重写了writeObject和readObject方法,而在方法的内部实现了对具体存储对象的序列化与反序列化。那么这两个方法究竟是在什么时候执行的呢?...方法 64 writeObjectMethod = getPrivateMethod(cl, "writeObject", 65 new Class...Default serialization for a class can be overridden using the 181 * writeObject and the readObject.../writeUnshared implementation. 214 */ 215 private void writeObject0(Object obj, boolean unshared
领取专属 10元无门槛券
手把手带您无忧上云