0

ファイルを外部リソースとして呼び出すのではなく、バイトの文字列として AS3 コードに直接「埋め込む」必要があります。

したがって、これはうまく機能します:

var testString = "537563636573733a20537472696e672072652d656e636f6465642e";
var testArray:ByteArray = new ByteArray();
var len:uint = testString.length;

trace("testString LENGTH: " + len.toString());

for (var i:uint = 0; i < len; i += 2) {
    var c:String = '0x' + testString.charAt(i) + testString.charAt(i + 1);

    if(i < 10) { trace("testString Byte: " + c); }

    testArray.writeByte(parseInt(c));
}

trace("testString: " + testArray.toString());
trace("testString NUMBER OF BYTES: " + testArray.length.toString());

そしてコンソールでこれを生成します:

testString LENGTH: 54
testString Byte: 0x53
testString Byte: 0x75
testString Byte: 0x63
testString Byte: 0x63
testString Byte: 0x65
testString: Success: String re-encoded.
testString NUMBER OF BYTES: 27

次に、16 進エディター (HxD) でターゲット ファイルを開き、上記と同様にバイトをコピーして String 変数に直接貼り付けます。コンソールに次の出力が表示されます。

testString LENGTH: 97478
testString Byte: 0x50
testString Byte: 0x4B
testString Byte: 0x03
testString Byte: 0x04
testString Byte: 0x14
testString: PK```
testString NUMBER OF BYTES: 48739

...そして、ファイル (ByteArray として) は、外部リソースとして (URLLoader を使用して) 使用したときに完全に読み取った同じライブラリでは読み取ることができません。

コードからバイト文字列をコピーして戻し、16 進エディターに貼り付けてファイルとして保存しようとしましたが、ファイルは正しく再作成されたので、コピーと貼り付けの問題ではないと思います。また、各バイト文字列の先頭から「0x」を削除し、「parseInt(c, 16)」で解析すると、まったく同じ結果が得られます。

追加の背景として、ターゲット ファイルは KMZ 3D モデルであり、ファイルは、Nochump ライブラリを使用して KMZ ファイルを解凍する Papervision3D の KMZ.as ライブラリによって解析されています。ByteArray を KMZ.as に渡そうとしたときに返されるエラー メッセージは次のとおりです。

Error: invalid zip
    at nochump.util.zip::ZipFile/findEND()
    at nochump.util.zip::ZipFile/readEND()
    at nochump.util.zip::ZipFile/readEntries()
    at nochump.util.zip::ZipFile()
    at org.papervision3d.objects.parsers::KMZ/parse()
    at org.papervision3d.objects.parsers::KMZ/load()
    at infoModel/initKMZ2()
    at infoModel()

どんな考えや提案も大歓迎です。

飼料

4

2 に答える 2

0

[Embed()]タグを使用します。

// Put this as a member variable in one of your classes somewhere
[Embed(source="object.kmz", mimeType="application/octet-stream")]
private static var myKMZ :Class;

これで、myKMZ は ByteArray を拡張したクラスになります。

データを取得する方法:

var myKMZbytes :ByteArray = new myKMZ() as ByteArray;
于 2010-03-10T22:15:35.133 に答える