WonHada.com으로 이전

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

Adobe AIR

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

반주부 2008. 3. 26. 14:35
반응형


* 바이트 배열(ByteArray)로 작업하기 ①
-ByteArray 클래스는 바이트 배열인 데이터의 바이너리 스트림을 읽고 쓰도록 해줍니다. 이 클래스는 데이터의 저수준 레벨에 접근하는 방법을 제공합니다. 컴퓨터 데이터는 바이트(8개의 비트 그룹)로 되어 있기 때문에, 바이트 데이터를 읽을 수 있다는 것은 데이터에 접근하기 위한 클래스와 메소드가 존재하지 않아도 데이터를 읽을 수 있음을 의미합니다. ByteArray 클래스는 비트맵에서부터 저수준의 네트워크 스트림 데이터까지 분석이 가능하도록 합니다.
writeObject() 메소드는 readObject() 메소드로 데이터를 직렬화하여 Action Message Format(AMF)로 저장한 데이터를 원래 오브젝트 형태로 쓸 수 있도록 합니다. 당신은 디스플레이 리스트에 위치할 수 있는 디스플레이 오브젝트를 제외한 어떤 오브젝트도 직렬화 할 수 있습니다. 또한 반대로도 가능합니다. 오브젝트를 AMF로 변환한 후, 당신은 네트워크로 보내거나 파일을 작성할 수 있습니다.

<ByteArray 읽고 쓰기>
-ByteArray 클래스는 flash.utils 패키지의 일부입니다. ActionScript 3.0의 ByteArray 오브젝트를 생성하기 위해서는, 다음 예에서 보듯이 ByteArray 클래스를 import 하고 생성자를 호출합니다:

import flash.utils.ByteArray;
var stream:ByteArray = new ByteArray();

<ByteArray 메소드>
-어떤 데이터 스트림이라도 당신이 원하는 정보를 찾을 수 있는 포맷으로 조직화됩니다. 예를 들어, 단순한 사원 파일의 기록은 아마도 ID번호, 이름, 주소, 전화번호 등이 포함될 것입니다. MP3 오디오 파일은 타이틀, 제작자, 앨범, 장르 등의 ID3 태그를 포함합니다. 포맷은 자료에 관한 질서를 유지하고 당신이 바이트 스트림을 읽을 수 있도록 합니다.

ByteArray 클래스는 데이터를 읽고 쓰기 쉽게해주는 몇개의 메소드를 포함합니다. 이 메소드들에는 readBytes(), writeBytes(), readInt(),  writeInt(), readFloat(), writeFloat(), readObject(), writeObject(), readUTFBytes() 그리고 writeUTFBytes() 등이 있습니다.

예를 들면, 아래의 코드는 문자열과 부동 소수점들의 단순한 배열을 읽고 ByteArray에 요소들을 씁니다. 자료를 쓰기위해 ByteArray 메소드들(writeUTFBytes()와 writeFloat())을 이용합니다.

// 아래의 예는 단순 배열(문자열과 부동 소수점으로 이루어진)을 읽고 ByteArray에 그것을 씁니다.
import flash.utils.ByteArray;
// 배열 정의
var groceries:Array = ["milk", 4.50, "soup", 1.79, "eggs", 3.19, "bread" , 2.35]
// ByteArray 정의
var bytes:ByteArray = new ByteArray();
//배열의 각 아이템에 대한 작업
for (var i:int = 0; i < groceries.length; i++) {
 bytes.writeUTFBytes(groceries[i++]); //문자열을 쓰고 다음 위치로 이동
 bytes.writeFloat(groceries[i]);// 부동소수점 쓰기
 trace("bytes.position is: " + bytes.position);//ByteArray의 position 표시
}
trace("bytes length is: " + bytes.length);// 길이 표시

<position 속성>
- position 속성은 읽거나 쓰는동안 ByteArray의 위치를 저장합니다. position 속성의 초기값은 아래에서 보는 것과 같이 0입니다.

var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0

당신이 ByteArray를 쓸 때, position 속성은 계속 업데이트 됩니다.

var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0
bytes.writeUTFBytes("Hello World!");
trace("bytes.position is now: " + bytes.position);// 12

읽을 때도 마찬가지입니다.

var bytes:ByteArray = new ByteArray();
trace("bytes.position is initially: " + bytes.position); // 0
bytes.writeUTFBytes("Hello World!");
trace("bytes.position is now: " + bytes.position);// 12
bytes.position = 0;
trace("The first 6 bytes are: " + (bytes.readUTFBytes(6)));//Hello
trace("And the next 6 bytes are: " + (bytes.readUTFBytes(6)));// World!

<bytesAvailable 과 length 속성>
- bytesAvailable 과 length 속성은 배열(Array)에서와 같이 ByteArray 의 길이를 알려줍니다.

var bytes:ByteArray = new ByteArray();
var text:String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus etc.";
bytes.writeUTFBytes(text); // write the text to the ByteArray
trace("The length of the ByteArray is: " + bytes.length);// 70
bytes.position = 0; // reset position
while (bytes.bytesAvailable > 0 && (bytes.readUTFBytes(1) != 'a')) {
//read to letter a or end of bytes
}
if (bytes.position < bytes.bytesAvailable) {
 trace("Found the letter a; position is: " + bytes.position); // 23
 trace("and the number of bytes available is: " + bytes.bytesAvailable);// 47
}








반응형