2011-04-05 11 views
6

Sto provando a creare un formato di file per me stesso, quindi stavo formando l'intestazione per il mio file. Per scrivere una stringa di lunghezza nota in un ByteArray, quale metodo dovrei usare, writeUTF() o writeUTFBytes().quando utilizzare writeUTF() e writeUTFBytes() in ByteArray di AS3

Dal riferimento del linguaggio Flex 3, mi dice che writeUTF() antepone la lunghezza della stringa e lancia un RangeError mentre writeUTFBytes() no.

Qualsiasi suggerimento sarebbe apprezzato.

risposta

14

L'unica differenza tra i due è che writeUTFBytes() non premettere al messaggio con la lunghezza della stringa (Il RangeError è perché 65535 è il numero più alto è possibile memorizzare in 16 bit)

in cui ci si usare l'uno sull'altro dipende da cosa stai facendo. Ad esempio, io uso writeUTFBytes() quando si copia un oggetto XML per essere compresso. In questo caso, non mi interessa la lunghezza della stringa, e introdurrebbe qualcosa in più al codice.

writeUTF() può essere utile se si sta scrivendo un server streaming/di rete, dove come si prefissa la lunghezza del messaggio al messaggio, si sa quanti byte eseguire lo streaming sull'altra estremità prima della fine del messaggio. ad esempio, ho 200 byte del valore del messaggio. Ho letto la lunghezza (numero intero a 16 bit), che mi dice che il messaggio è 100 byte. Ho letto 100 byte e so che è un messaggio completo. Tutto dopo è un altro messaggio. Se la lunghezza del messaggio dicesse che il messaggio era di 300 byte, allora saprei che dovrei aspettare un po 'prima di avere il messaggio completo.

+0

grazie divinamente – midhunhk

+0

Buona risposta. C'è anche questo post sul blog che dice fondamentalmente la stessa cosa: http://www.rogue-development.com/blog2/2009/06/bytearray-writeutf-vs-writeutfbytes/ –

3

Penso di aver trovato la soluzione da solo. Mi è venuto in mente quando stavo programmando per leggere i dati. Le funzioni corrispondenti per leggere da un messaggio di lettura readUTF() e readUTFBytes (length: uint) richiedono che la lunghezza venga passata ad esso.

Quindi, se si conosce la lunghezza della stringa che si sta per scrivere, è possibile utilizzare writeUTFBytes() e utilizzare readUTFBytes() con tale dimensione. Altrimenti puoi usare readUTF(), lasciando che as3 scriva la dimensione dei dati che possono essere letti di nuovo senza conoscere la lunghezza della stringa durante l'uso di readUTF().

Spero che questo possa essere utile anche a qualcuno.

+1

Aggiunta: Usa 'socket.readUTFBytes (socket .bytesAvailable); 'nell'evento' ProgressEvent.SOCKET_DATA'. Quindi conosci la dimensione del messaggio in arrivo. – Bitterblue