我需要将文件作为字节字符串直接“嵌入”到 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
所以接下来我在十六进制编辑器(HxD)中打开我的目标文件并将字节直接复制并粘贴到我的字符串变量中,就像上面一样,我得到以下输出到控制台:
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)时,它可以完美地读取它。
我确实尝试将字节字符串从我的代码中复制回来,将其粘贴到十六进制编辑器中并将其保存为文件,并且该文件已正确重新创建,因此我认为这不是复制和粘贴问题。此外,从每个字节字符串的前面删除“0x”并使用“parseInt(c, 16)”进行解析会产生完全相同的结果。
对于一些额外的背景,目标文件是一个 KMZ 3D 模型,并且该文件正在由 Papervision3D 的 KMZ.as 库解析,该库使用 Nochump 库来解压缩 KMZ 文件。尝试将 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()
任何想法和/或建议将不胜感激。
饲料