これは、Adobe SocketServer のプロトコル要件にすぎないと思います。AMF は、文字列にも UTF を使用するため、単一オブジェクトの文字列に対して利点はありません。
package
{
import flash.display.Sprite;
import flash.utils.ByteArray;
public class astest extends Sprite
{
public function astest()
{
var str:String = "sdfKdkhsdfn345k4jhskdfhsdkf34k,,mancoasdc2";
var bytesUTF:ByteArray = new ByteArray();
bytesUTF.writeUTF(str);
var bytesAMF:ByteArray = new ByteArray();
bytesAMF.writeObject(str);
var hexUTF:String = getHexBytesString(bytesUTF);
var hexAMF:String = getHexBytesString(bytesAMF);
trace("hexUTF:", hexUTF, bytesUTF.length, "bytes");
trace("hexAMF:", hexAMF, bytesAMF.length, "bytes");
trace(hexUTF.substr(4) == hexAMF.substr(4));
}
public static function getHexBytesString(array:ByteArray, colons:Boolean=false, position:int = 0):String {
var s:String = "";
var len:uint = array.length;
for (var i:int=position;i<len;i++) {
s+=("0"+array[i].toString(16)).substr(-2,2).toUpperCase();
if (colons && i<array.length-1) s+= "-";
}
return s;
}
}
}
出力:
hexUTF: 002A7364664B646B687364666E3334356B346A68736B64666873646B6633346B2C2C6D616E636F6173646332 44 bytes
hexAMF: 06557364664B646B687364666E3334356B346A68736B64666873646B6633346B2C2C6D616E636F6173646332 44 bytes
true
ただし、一般に、AMF は 1 つのオブジェクト内の等号文字列の参照を使用するため、同じ文字列を 2 回書き込む場合は、AMF ( writeObject
) と String ( )の結果のバイトのサイズに利点があります。writeUTF
package
{
import flash.display.Sprite;
import flash.utils.ByteArray;
public class astest extends Sprite
{
public function astest()
{
var str:String = "sdfKdkhsdfn345k4jhskdfhsdkf34k,,mancoasdc2";
var bytesUTF:ByteArray = new ByteArray();
bytesUTF.writeUTF(str);
bytesUTF.writeUTF(str);
var bytesAMF:ByteArray = new ByteArray();
bytesAMF.writeObject({str1:str, str2:str});
var hexUTF:String = getHexBytesString(bytesUTF);
var hexAMF:String = getHexBytesString(bytesAMF);
trace("hexUTF:", hexUTF, bytesUTF.length, "bytes");
trace("hexAMF:", hexAMF, bytesAMF.length, "bytes");
trace(hexUTF.substr(4) == hexAMF.substr(4));
}
public static function getHexBytesString(array:ByteArray, colons:Boolean=false, position:int = 0):String {
var s:String = "";
var len:uint = array.length;
for (var i:int=position;i<len;i++) {
s+=("0"+array[i].toString(16)).substr(-2,2).toUpperCase();
if (colons && i<array.length-1) s+= "-";
}
return s;
}
}
}
出力:
hexUTF: 002A7364664B646B687364666E3334356B346A68736B64666873646B6633346B2C2C6D616E636F6173646332002A7364664B646B687364666E3334356B346A68736B64666873646B6633346B2C2C6D616E636F6173646332 88 bytes
hexAMF: 0A0B01097374723206557364664B646B687364666E3334356B346A68736B64666873646B6633346B2C2C6D616E636F61736463320973747231060201 60 bytes
false