AMF.JS
This project uses the modern Javascript Typed Array specification (e.g, ArrayBuffer, U8intArray, DataView, etc.).
Designed for browsers or Node.JS.
Errata
Inspiration
Everything you need to know about the data structure:
Understanding [A]BNF frequently referenced throughout the spec:
Reverse-engineering via ActionScript 3:
AS3 Object serialization:
import com.hurlant.util.Hex;import flash.utils.ByteArray; // ... public function serialize():void { var o:Object = new Object(); o.name = "John Doe"; var byteArray:ByteArray = new ByteArray(); byteArray.writeObject(o); trace("serialized: "+ Hex.fromArray(byteArray));}
AS3 Object deserialization:
import com.hurlant.util.Hex;import flash.utils.ByteArray; // ... public function dumpObj(oObj:Object, sPrefix:String = ""):void { sPrefix == "" ? sPrefix = "---" : sPrefix += "---"; for (var i:* in oObj) { trace(sPrefix, i + " : " + oObj[i], " "); if (typeof(oObj[i]) == "object") dumpObj(oObj[i], sPrefix); }} public function deserialize():void { var byteArray:ByteArray = new ByteArrray(); // ... fill with bytes ... var o:Object = byteArray.readObject(); trace("deserialized: "+ this.name +" hex= "+ Hex.fromArray(ba)); dumpObj(o);}