以前、規定のJavaのオブジェクトをAMFを用いてas3上のクラスにマッピングする方法を記述しましたが、
今回は、任意のJavaクラス(自分で作成したJavaクラス)についてです。
1.Javaのクラス定義の際にjava.io.Externalizableインターフェイスを実装する
以下は必要となるメソッドのみを抜粋しています。
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
isDirectory = in.readBoolean();
isFile = in.readBoolean();
isAbsolute = in.readBoolean();
isHidden = in.readBoolean();
absolutePath = (String)in.readObject();
canonicalPath = (String)in.readObject();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeBoolean(isDirectory);
out.writeBoolean(isFile);
out.writeBoolean(isAbsolute);
out.writeBoolean(isHidden);
out.writeObject(absolutePath);
out.writeObject(canonicalPath);
}
という感じに、readExternal()とwriteExternalを実装する必要があります。
2.AS3上でflash.utils.IExternalizableインターフェイスを実装したクラスを作成する
AS3上でもJavaと同様な感じにします。
public function writeExternal(output:IDataOutput):void{
output.writeBoolean(isDirectory);
output.writeBoolean(isFile);
output.writeBoolean(isAbsolute);
output.writeBoolean(isHidden);
output.writeFloat(lastModifed);
output.writeFloat(length);
output.writeObject(absolutePath);
output.writeObject(canonicalPath);
}
public function readExternal(input:IDataInput):void{
isDirectory = input.readBoolean();
isFile = input.readBoolean();
isAbsolute = input.readBoolean();
isHidden = input.readBoolean();
lastModifed = input.readDouble();
length = input.readDouble();
absolutePath = input.readObject();
canonicalPath = input.readObject();
}
3.AS3上のクラスに対して、RemoteClassの指定をする。
[RemoteClass ( alias="com.coltware.serene.service.file.JFile") ]
public class JFile implements IExternalizable{
// 省略
}
という感じになります。


