jump to navigation

AMF –The ABCs of AMF Format July 23, 2010

Posted by Tournas Dimitrios in Actionscript.

The AMF file format is a binary file format representing a serialized ActionScript object. This file type is used in many places within the Flash Player and AIR for data storage and data exchange. In Flash Player 9 and AIR, the flash.utils.ByteArray class is the primary way AMF is handled. Let’s look at some examples:

//create some AMF within a ByteArray
import flash.utils.ByteArray;
//create a bytearray
var bytes:ByteArray = new ByteArray();
//write an object into the bytearray
 { myString:"Hello World" , myNumber:21 , myBool:true }

When you write an object into a ByteArray, it serializes the object into an array of bytes using the AMF file format. You can then transfer this file over a network or save it to a file system to be deserialized later. Let’s deserialize AMF:

//create an object and deserialize an object from a bytearray
var myObject:Object = bytes.readObject();
//trace a property
trace( myObject.myString ) // Hello World

In this case the myObject variable looks exactly like the object that was originally put into the ByteArray. Once the AMF data is transformed into a real object again, we can use it in ActionScript the same as before.

In Flash Player, AMF is used in SharedObject, RemoteObject, LocalConnection, ByteArray, RTMP (all variants) and all RPC remoting operations. The benefits of AMF are actually really misunderstood, so let’s take a quick look:

1. File Size – AMF objects are very small and are compressed using zlib.

2. Fast Serialization/Deserialization – AMF is transformed using native C code in the player so it is blazing fast. The AMF format was designed to serialize and de-serialize quickly under low memory and slower CPU conditions. As the AMF data is parsed directly to objects, there is no lag for interpretation or parsing of AMF and creation of objects is done on a single pass.

3. Native Types and Custom classes supported – You can serialize any object in Flash Player except displayObjects. You can also map serialized objects back to custom class instances provided the custom class is in the Flash Player when things are deserialized.

I hear many folks talk about remoting with Flash Player but there is a lower level to remoting in using AMF directly. What is cool here is that you are not limited to traditional RPC using HTTP/HTTPS, as Flash Player 9 supports binary sockets in the flash.net.Socket class and stream loading of AMF using flash.net.URLStream class. Better still, you can use AMF to store data on the server side without the server needing to know anything about the objects themselves. It is an ideal way to exchange data and persist objects to disk or to the network.

I would encourage you to take a deeper look at AMF. There are some low-level benefits to using it that are hard to beat. With all distributed computing systems, serialized object formats are essential and AMF is the native format for Flash Player.


1. srikanth - May 17, 2011

Hi, the article is good with simple code and easy explanation.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s