2011-04-05 11 views
6

Próbuję utworzyć format pliku dla siebie, więc tworzyłem nagłówek dla mojego pliku. Aby napisać znany ciąg znaków do obiektu ByteArray, należy użyć tej metody, writeUTF() lub writeUTFBytes().Kiedy używać writeUTF() i writeUTFBytes() w ByteArray z AS3

Z języka ref 3 w języku Flex mówi mi, że writeUTF() przedłuża długość łańcucha i generuje RangeError, podczas gdy writeUTFBytes() nie.

Wszelkie sugestie będą mile widziane.

Odpowiedz

14

Jedyną różnicą między nimi jest, że writeUTFBytes() nie dokleja się komunikat o długości łańcucha (The RangeError dlatego 65535 to najwyższa liczba można przechowywać w 16 bitach)

Gdzie dalszy używać jednego na drugim, zależy od tego, co robisz. Na przykład używam writeUTFBytes() podczas kopiowania obiektu XML do skompresowania. W tym przypadku nie dbam o długość napisu i wprowadziłbym coś dodatkowego do kodu.

writeUTF() może być przydatna, jeśli piszesz serwer przesyłania strumieniowego/sieci, gdzie podczas prefiksowania długości wiadomości do wiadomości, wiesz, ile bajtów ma zostać przesłanych strumieniowo na drugim końcu przed końcem wiadomości. np. Mam komunikat o wartości 200 bajtów. Czytałem długość (16-bitową liczbę całkowitą), która mówi mi, że wiadomość ma 100 bajtów. Czytam w 100 bajtów i wiem, że to kompletna wiadomość. Wszystko po to kolejna wiadomość. Jeśli długość wiadomości mówi, że wiadomość ma 300 bajtów, to wiedziałbym, że muszę poczekać, zanim otrzymam pełną wiadomość.

+0

dziękuję divily – midhunhk

+0

Dobra odpowiedź. Istnieje również ten wpis na blogu, który zasadniczo mówi to samo: http://www.rogue-development.com/blog2/2009/06/bytearray-writeutf-vs-writeutfbytes/ –

3

Myślę, że znalazłem rozwiązanie samodzielnie. Przyszło mi do głowy, kiedy kodowałem, żeby odczytać dane. Odpowiednie funkcje odczytu z bytearray readUTF() i readUTFBytes (length: uint) wymagają przekazania do niego długości.

Więc jeśli znasz długość napisu, który napiszesz, możesz użyć writeUTFBytes() i użyć readUTFBytes() o tym rozmiarze. W przeciwnym razie możesz użyć readUTF(), pozwalając as3 zapisywać rozmiar danych, które można odczytać bez konieczności poznania długości łańcucha podczas korzystania z readUTF().

Mam nadzieję, że to może być przydatne również dla niektórych.

+1

Dodatek: Użyj 'socket.readUTFBytes (socket .bytesAvailable); 'w zdarzeniu' ProgressEvent.SOCKET_DATA'. Wtedy znasz rozmiar przychodzącej wiadomości. – Bitterblue