2012-03-15 2 views
0

객체를 AMF로 serialize하려는 경우 결과가 NetConnection.call()에 의해 직렬화되는 것과 똑같기를 원합니다. 따라서 ByteArray.writeObject()를 사용하고 출력 바이트는 일반적으로 NetConnection.call()에 의해 전송 된 바이트와 동일하지만 때로는 몇 바이트가 다릅니다.NetConnection과 똑같이 AMF로 serialize

AMF3 사양에서 "ByteArray.writeObject는 전체 개체를 인코딩하는 데 하나의 AMF 버전을 사용합니다 .NetConnection과 달리 ByteArray는 AMF 0에서 시작하지 않고 AME 3으로 전환합니다 (objectEncoding 속성 집합과 함께). AMF 3). " 차이점을 설명합니다.

이 문제를 어떻게 해결할 수 있습니까?

+1

작은 팁 : NetConnection => PHP 인코딩을 사용하기 때문에 PHP 인코더가 작동하는 방식을 AMFPHP로 확인하십시오. – turbosqel

답변

1

NetConnection.call이 작동하는 방식과 유효한 요청 및 응답을 구성하는 방법은 섹션 4의 AMF0 specs에 자세히 설명되어 있습니다. NetConnection.call에는 헤더, RPC 메소드 이름, 요청이 성공했거나 오류가 발생했습니다. 이것이 writeObject를 사용하여 유효한 요청을 생성 할 수없는 이유입니다.

AMF0에서 AMF3으로 전환하는 비트는 AMF0에서 데이터 손실없이 모든 AS3 오브젝트를 쓸 수는 없기 때문에 원래의 Flash Player는 모두 본문이 AMF0에 있다고 가정하기 때문입니다. 인코딩 중에 AMF3을 인코딩에 사용하도록 지정한 경우 인코딩 중에 AMF3 모드에서 writeObject를 호출하기 전에 AMF0-to-AMF3 표식 (0x11)을 씁니다.