Apache flex 如何读取嵌入的bytarray文件?

Apache flex 如何读取嵌入的bytarray文件?,apache-flex,bytearray,filereference,Apache Flex,Bytearray,Filereference,我为我的游戏创建了一个平铺地图编辑器,当用户完成设计时,它将生成一个文件。该文件将存储使用的资产和其他信息 这是关于如何生成文件的代码 var ba:ByteArray = new ByteArray(); var masterData:Object = { map:Data.instance.mapLayerArr, asset:ass

我为我的游戏创建了一个平铺地图编辑器,当用户完成设计时,它将生成一个文件。该文件将存储使用的资产和其他信息

这是关于如何生成文件的代码

                var ba:ByteArray = new ByteArray();
                var masterData:Object = { map:Data.instance.mapLayerArr, 
                                               asset:assetCollection, 
                                               gridrow:Data.instance.gridRow,
                                               gridColumn: Data.instance.gridColumn,
                                               cellWidth: Data.instance.cellWidth,
                                               cellHeight: Data.instance.cellHeight,
                                               assetCount: Data.instance.assetCount,
                                               layerCount: Data.instance.layerCount,
                                               version: Data.instance.version};

                ba.writeObject(masterData);
                ba.compress();
                file = new FileReference();
                file.save(ba, Data.instance.fileName);
当我想在游戏中嵌入生成的文件时,问题就开始了

这是我程序中的代码

    [Embed(source='../../../../res/tilemapdata/File Name', mimeType='application/octet-stream')]
    public static const TileMapFile:Class;

    public function TileMapLoader() 
    {
        var byteArray:ByteArray;
        byteArray = new TileMapFile();

        byteArray.uncompress();
        var obj:Object;
        obj = byteArray.readObject();
        trace(fileReference);
    }
无论何时运行,它都以obj=byteArray.readObject结束;并将显示此错误

[Fault] exception, information=ArgumentError: Error #2173: Unable to read object in stream.  The class flex.messaging.io.ArrayCollection does not implement flash.utils.IExternalizable but is aliased to an externalizable class.

您正在使用一个奇怪的类flex.messaging.io.ArrayCollection-尝试用mx.collections.ArrayCollection替换所有此类导入


还要确保存储在文件中的所有类都有[RemoteClass]元标记,否则它们将被还原为对象实例。

请仔细阅读adobe的官方文档:

我也经历过同样的问题。帮助我解决以下问题的一般规则:

最好在客户端actionscript类上显式声明metatag[RemoteClass]。 服务器端类列表、数组等的集合。当通过mx.collections.ArrayCollection表示客户端闪存时,更易于处理。 在某些情况下,您可能需要在任何反序列化发生之前通过编码显式地声明客户端Flash类与服务器端类的关系。Flash.net.registerClassAliasnet.acme.serverside.Foo,clientside.Foo;否则,在反序列化之后,您的对象将被取消类型化为泛型flash.Object。
检查您的ArrayCollection别名是否通过以下方式注册:

import mx.collections.ArrayCollection;
...
registerClassAlias("flex.messaging.io.ArrayCollection", ArrayCollection);
而不是:

import mx.collections.ArrayCollection;
...
registerClassAlias("mx.collections.ArrayCollection", ArrayCollection);
有以下解释: