WonHada.com으로 이전

[Adobe AIR] 바이트 배열(ByteArray)로 작업하기 ② 본문

Adobe AIR

[Adobe AIR] 바이트 배열(ByteArray)로 작업하기 ②

반주부 2008. 4. 9. 13:12
반응형


 

* 바이트 배열(ByteArray)로 작업하기 ②


<endian 속성>

-컴퓨터는 바이트를 저장하는 방법이 틀릴 수 있습니다. 예를 들어, integer는 메모리의 4바이트 또는 32비트를 잡을 수 있습니다. 몇몇 컴퓨터는 가장 낮은 메모리 주소에 가장 중요한 첫번째 바이트를 저장합니다. 다른 컴퓨터들은 가장 적게 중요한 바이트를 저장합니다. 또는 바이트 배열 안에서, 컴퓨터의 이 속성은 big endian(대부분의 중요한 바이트를 첫번째로 저장) 또는 little endian(가장 적게 중요한 바이트를 첫번째로 저장) 이라고 불립니다. 예를 들면, 수 0x31323334는 다음과 같이 big endian과 little endian 바이트 순서대로 저장될 것입니다. 여기서 a0은 4 바이트의 가장 낮은 메모리 주소를 의미하고, a3은 가장 높은 것을 의미합니다:


사용자 삽입 이미지












ByteArray 클래스의 endian 속성은 당신에게 당신이 처리하는 멀티바이트 번호에 대한 바이트 순서를 나타내도록 합니다. 이 속성에 넣을 수 있는 값은 "bigEndian" 또는 "littleEndian"입니다. 그리고 Endian 클래스는 BIG_ENDIAN과 LITTLE_ENDIAN 상수값을 정의합니다.


<compress()와 uncompress() 메소드>

-바이트 배열을 압축하고 압축을 풀때 사용하는 메소드입니다.

다음은 deflate 알고리즘을 사용해서 ByteArray를 압축합니다.


bytes.compress(CompressionAlgorithm.DEFLATE);


다음은 deflate 알고리즘을 사용해서 압축을 풉니다.

bytes.uncompress(CompressionAlgorithm.DEFLATE);


<오브젝트 읽고 쓰기>

-readObject()와 writeObject() 메소드는 Action Message Format(AMF)로 직렬화 된 오브젝트를 읽고 씁니다. AMF는 어도비에서 만들었고, Netstream, NetConnection, NetStream, LocalConnection와 Shared Objects를 포함하는 여러 가지 ActionScript 3.0의 클래스들에 의해 사용되는 메시지 프로토콜입니다.


1 바이트의 타입 표시는 뒤에 따라오는 인코딩된 데이터의 타입을 기술합니다. AMF는 이하의 13개 자료 형들을 사용합니다:


value-type = undefined-marker | null-marker | false-marker | true-marker | integer-type |

double-type | string-type | xml-doc-type | date-type | array-type | object-type |

xml-type | byte-array-type


인코딩된 데이터는 null 또는 true, false와 같이 마커가 하나의 가능한 값을 의미하지 않을 때까지 타입 마커를 따라갑니다.


AMF는 두개의 버젼이 있습니다: AMF0과 AMF3.


AMF 0은 참조에 의해 복잡한 오브젝트를 보내고 오브젝트를 복원하기 위해 엔드포인트를 허가합니다.


AMF 3는, 오브젝트 참조에 더하여, 오브젝트 특징과 문자열을 참조형으로 보냄으로써 AMF 0을 개선하고 있습니다.


ByteArray.objectEcoding 속성은 오브젝트 데이터를 코드화하기 위해 사용되는 AMF의 버젼을 지정할 때 사용합니다.


flash.net.ObjectEncoding 클래스는 AMF 버젼을 설정하기 위한 상수를 정의합니다:

ObjectEncoding.AMF0 와 ObjectEncoding.AMF3.


다음의 예는 ByteArray에 XML 오브젝트를 쓰기 위해 writeObject()를 호출합니다. 그리고 Deflate 알고리즘을 이용해 압축하고 데스크탑에 파일을 작성합니다.


예제에서는 파일 작성이 끝날 때 AIR 윈도우에 "Wrote order file to desktop!" 메시지를 출력하기 위해 라벨을 사용합니다.



readObject()메소드는 ByteArray로부터 직렬화 된 AMF 오브젝트를 읽고, 그것을 지정받았던 타입의 오브젝트에 저장합니다.


다음 예는 ByteArray(inBytes)로 데스크탑에서 파일을 읽고, 압축을 풀고, orderXML에 저장합니다.


예제는 TextArea에 각 노드를 표시하기 위해 for each()를 사용합니다.

또한, objectEncoding 속성도 표시합니다.









반응형