Serialization Error/Bug When Using a ByteArray and readObject in an IExternalizable Class?
Wednesday, August 27th, 2008 by Greg JastrabI’ve encountered some odd behavior that I would have expected to work when calling readObject() to de-serialize an array of anonymous objects. If anyone knows what’s going on here, please enlighten me. I’ve also filed a bug on Adobe’s bug tracking system if anyone wants to follow the progress at Adobe’s end.
I’m trying to read all of the bytes in the readExternal() function of a class implementing IExternalizable, so that I may use the position property to move back in stream in case I need to do so. The problem only seems to occur if I am trying to de-serialize an Array of anonymous objects. If I put plain old Strings in the Array it will work fine. I find this odd since I would expect
public function readExternal(input:IDataInput):void { var arr:Array = input.readObject() as Array; }
to have the exact same behavior as:
public function readExternal(input:IDataInput):void { var ba:ByteArray = new ByteArray(); var inputBytes:uint = input.bytesAvailable; input.readBytes(ba); var baBytes:uint = ba.bytesAvailable; var arr:Array = ba.readObject() as Array; trace("inputBytes == baBytes ?= " + (inputBytes == baBytes)); // traces "inputBytes == baBytes ?= true }
AIR installer and code attached below… (more…)
