Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ByteArray > compress toString > decompress ??? (или обратимость сжатия через строку) (http://www.flasher.ru/forum/showthread.php?t=99138)

neelts 29.07.2007 18:29

ByteArray > compress toString > decompress ??? (или обратимость сжатия через строку)
 
каким образом это можно реализовать обратимость сжатия? я пробовал так:

Код:


var b:ByteArray = new ByteArray();
b.writeUTF("hello world");
b.compress();
var s:String = b.toString();
b.length = 0;
b.writeUTF(s);
b.uncompress(); // ошибка


lowka 29.07.2007 18:53

Код:

var b:ByteArray = new ByteArray();
b.writeUTFBytes("hello world");
b.compress();
trace(b.length);
b.uncompress();
trace(b.length);
trace(b.readUTFBytes(b.length));


neelts 29.07.2007 19:06

lowka, этото понятно, а как через строку то?
скажем мне нужно отправить сжатую строку на сервер, и её же получить и расжать.

etc 29.07.2007 22:17

А что, сервер выдает данные в бинарном виде, которые можно загрузить через URLLoader или URLStream и распаковать. А потом прочитывать UTF8.

neelts 29.07.2007 22:41

да, это я видел в связке AS3 + AMFPHP

идем дальше: что если данные сжимаются на стороне сервера, скажем с помощью gzcompress ?

результаты сжатия с ByteArray.compress почему то отличаются..

пример сжатия "hello world"

flash: xÚcàÎHÍÉÉW(Ï/ÊI

php: xÚËHÍÉÉW(Ï/ÊI

! не все символы отображаются



существует ли решение этой проблемы?

neelts 29.07.2007 23:01

ыы, посравнивал тут коды символов сжатия, закономерность есть)

вообщем сжать в пхп и распаковать во флеше реально! )
поизучаю еще, если получится написать конвертер, сообщу немедленно

etc 29.07.2007 23:12

Для начала надо перестать просматривать подобным образом контент.

neelts 29.07.2007 23:57

я имел ввиду hex коды.

короче схожесть с увеличением строк куда то пропадает, возможно как то не так конвертирую символы.

ведь аналог charCodeAt в php далеко не ord ?

neelts 30.07.2007 00:49

отлично, со схожестью почти разобрался, оказывается надо использовать writeMultiByte c подходящей кодировкой

etc 30.07.2007 00:51

Опытным путем было установлено, что сжимать в php нужно с уровнем 9 и во Flash пропустить первые три байта полученного bytearray (позже выяснилось, что это не нужно, это просто три байта UTF-8 BOM затесались).

Код:

<?php
$str = gzcompress('it is a good day to die',  9);
echo $str;
?>

Код:

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest('http://php/zlib/?test='+Math.random());
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(request);
var completeHandler:Function = function(event:Event):void {
        var ba:ByteArray = event.target.data;
        var ab:ByteArray = new ByteArray();
        ab.writeMultiByte('it is a good day to die','x-ansi');
        ab.compress();
        trace(ab,ab.length, ab[3].toString(16));
        trace(ba,ba.length, ba[3].toString(16));
        ba.uncompress();
        trace(ba);
}
loader.addEventListener(Event.COMPLETE, completeHandler);

Не уверен, что сие есть правильное решение, но переваривает строки довольно длинные без особых проблем.


Часовой пояс GMT +4, время: 06:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.