2011-04-05 10 views
6

自分用のファイル形式を作成しようとしていますので、ファイルのヘッダーを作成していました。既知の長さの文字列をByteArrayに書き込むには、どのメソッドを使用するか、writeUTF()またはwriteUTFBytes()を使用します。AS3のByteArrayでwriteUTF()とwriteUTFBytes()を使用する場合

Flex 3の言語リファレンスから、writeUTF()は文字列の長さの前にRangeErrorをスローし、writeUTFBytes()はスローしません。

ご迷惑をおかけして申し訳ございません。

答えて

14

2間の唯一の違いはwriteUTFBytes()が文字列の長さのメッセージを付加しないことである

あなたがしたい(65535あなたは16ビットで格納できる最大数であるため例外RangeErrorがあります)あなたがやっていることに依存して、他のものを使う。たとえば、XMLオブジェクトをコピーして圧縮するときは、writeUTFBytes()を使用します。この場合、文字列の長さは気にしません。コードに余分なものが導入されます。

writeUTF()は、ストリーミング/ネットワークサーバーを作成する場合に便利です。メッセージの末尾にメッセージの長さを付加すると、メッセージの終わりまでに相手側にストリームするバイト数を知ることができます。例えば、私は200バイト分のメッセージを持っている。私はメッセージが100バイトであることを示す長さ(16ビット整数)を読みます。私は100バイトで読みました、そして、私はそれが完全なメッセージであることを知っています。後はすべて別のメッセージです。メッセージの長さがメッセージの長さが300バイトだとすると、メッセージが完全に出るまで少し待たなければならないことがわかります。

+0

ありがとうございます。 – midhunhk

+0

良い答えです。 基本的に同じことを言うこのブログ記事もあります:http://www.rogue-development.com/blog2/2009/06/bytearray-writeutf-vs-writeutfbytes/ –

3

私は自分自身で解決策を見つけたと思います。私がデータを読み返すようにコーディングしていたとき、それは私のもとに来た。 bytearray readUTF()とreadUTFBytes(length:uint)から読み取る関数は、長さを渡す必要があります。

あなたが書き込む文字列の長さを知っていれば、writeUTFBytes()を使用してそのサイズのreadUTFBytes()を使用できます。そうでなければ、readUTF()を使用して、文字列の長さを知らなくても読み出すことができるデータのサイズをas3に書き込ませることができます。

これはいくつかの人にも役立つことを期待しています。

+1

追加: 'socket.readUTFBytes(socket .bytesAvailable); 'ProgressEvent.SOCKET_DATA'イベントで発生します。次に、着信メッセージのサイズを知っています。 – Bitterblue

関連する問題