2011-04-05 6 views
6

Estoy tratando de crear un formato de archivo para mí, así que estaba formando el encabezado de mi archivo. Para escribir una cadena de longitud conocida en un ByteArray, qué método debo usar, writeUTF() o writeUTFBytes().cuándo utilizar writeUTF() y writeUTFBytes() en ByteArray de AS3

Desde la referencia del lenguaje Flex 3, me dice que writeUTF() hace la longitud de la cadena y arroja un RangeError mientras que writeUTFBytes() no lo hace.

Cualquier sugerencia sería apreciada.

Respuesta

14

La única diferencia entre los dos es que writeUTFBytes() no anteponga el mensaje con la longitud de la cadena (La RangeError se debe a 65535 es el número más alto que puede almacenar en 16 bits)

el lugar donde quiere usar uno sobre el otro depende de lo que estés haciendo. Por ejemplo, uso writeUTFBytes() al copiar un objeto XML para que se comprima. En este caso, no me importa la longitud de la cadena, e introduciría algo extra en el código.

writeUTF() puede ser útil si está escribiendo un servidor de transmisión/red, donde como prefija la longitud del mensaje, sabe cuántos bytes transmitir en el otro extremo antes del final del mensaje. Por ejemplo, tengo un mensaje de 200 bytes. Leí la longitud (entero de 16 bits), que me dice que el mensaje es de 100 bytes. Leí en 100 bytes y sé que es un mensaje completo. Todo después es otro mensaje. Si la longitud del mensaje decía que el mensaje era de 300 bytes, entonces sabría que tendría que esperar un poco antes de recibir el mensaje completo.

+0

gracias divily – midhunhk

+0

Buena respuesta. También hay esta publicación en el blog que básicamente dice lo mismo: http://www.rogue-development.com/blog2/2009/06/bytearray-writeutf-vs-writeutfbytes/ –

3

Creo que he encontrado la solución yo mismo. Me vino a la mente cuando estaba codificando para volver a leer los datos. Las funciones correspondientes para leer desde un bytearray readUTF() y readUTFBytes (length: uint) requieren que se le pase la longitud.

Así que si conoce la longitud de la cadena que va a escribir, puede usar writeUTFBytes() y usar readUTFBytes() con ese tamaño. De lo contrario, puede usar readUTF(), permitiendo que as3 escriba el tamaño de los datos que pueden leerse sin necesidad de conocer la longitud de la cadena mientras usa readUTF().

Espero que esto también sea útil para alguien.

+1

Adición: Use 'socket.readUTFBytes (socket .bytesAvailable); 'en el evento' ProgressEvent.SOCKET_DATA'. Entonces sabes el tamaño del mensaje entrante. – Bitterblue

Cuestiones relacionadas