在上一篇的实践案例中我们在自定义JavaBean的时候,通过实现WritableComparable接口,并重写其方法来实现序列化与反序列化。在重写readFields()时,我们之前写的案例都是对象的属性类型不同,所以在反序列化时直接调用dataInput.readUTF()和dataInput.readDouble()分别赋给string类型和Double类型的属性。这里会产生一个疑问,在反序列化时没有指定将哪个值反序列化之后赋给JavaBean中的某个属性,该案例中属性类型不同,我们姑且认为是通过数据类型来区分之后,反序列化之后也会根据类型赋给JavaBean,但是如果是JavaBean中有多个相同类型的属性呢,这时候如果还没有指定将哪个值反序列化后赋给某个属性,那这是如何确保它反序列化之后的值是正确对应我们的JavaBean属性的呢。
通过查阅文章了解到,无论JavaBean中的属性是什么类型,都要确保序列化与反序列化的顺序是一致的,也就是说你在write()中是对属性按照怎样的顺序实现序列化写入数据的,那么你就要按照同样的属性顺序在readFields()中实现反序列化,否则读写过程中的序列化与反序列化就是混乱的,也就会导致序列化前后的值并不是正确的值。 所以,在实现序列化与反序列化时一定要确保顺序一致。