파일을 외부 리소스로 호출하는 대신 AS3 코드에 직접 바이트 문자열로 '포함'해야합니다.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
... (URLLoader를 사용하여) 외부 리소스로 사용할 때 완벽하게 읽은 동일한 라이브러리에서 ByteArray로 파일을 읽을 수 없습니다.
코드에서 바이트 문자열을 복사 해 보았습니다. 그것을 16 진수 편집기에 붙여 넣은 다음 파일로 저장하면 파일이 올바르게 다시 만들어져 복사 및 붙여 넣기 문제가 아닌 것 같습니다. 또한 각 바이트 문자열 앞에서 '0x'를 제거하고 "parseInt (c, 16)"로 구문 분석하면 정확히 동일한 결과가 생성됩니다.
일부 추가 배경의 경우 대상 파일은 KMZ 3D 모델이며 파일은 Nochump 라이브러리를 사용하여 KMZ 파일의 압축을 해제하는 Papervision3D의 KMZ.as 라이브러리에 의해 구문 분석됩니다. KMZ.as로 된 ByteArray를 통과 할 때 내가 돌아올 오류 메시지는 다음과 같습니다
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()
어떤 생각 및/또는 제안 크게 감상 할 수있다.
사료
안녕 Herms의 시도 주셔서 감사합니다 - 그것은 좋은 생각과는 문자열과 바이트 사이에 교환하는 데에서 저를 유지합니다. 불행히도, 같은 "잘못된 우편"오류가 여전히 발생합니다. 파일의 바이트를 포함하는 배열이 너무 큰 경우에도 새로운 오류가 발생합니다. "ABC 데이터가 손상되어 읽을 수 없습니다." 그러나 모델의 크기를 줄이면 오류가 발생하지 않습니다. – fodder