Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Конкатенация ByteArray-s. (http://www.flasher.ru/forum/showthread.php?t=189388)

ZicoRio 12.12.2012 08:56

Конкатенация ByteArray-s.
 
Всем привет.
Возможно ли как-то добавить в начало ByteArray какие-нибудь байты
или произвести конкатенацию ByteArray+ByteArray без перевода их в строки?

FlashRus 12.12.2012 09:04

http://help.adobe.com/ru_RU/FlashPla...ml#writeBytes()

ZicoRio 12.12.2012 09:13

Либо со мной что-то не так, либо...
Все что на указанной странице написано - уже прочитал (до того как задать
вопрос здесь, ответа на мой вопрос там нет).
Поэтому вопрос еще актуальный!!!

FlashRus 12.12.2012 09:20

ByteArray#writeBytes
Цитата:

Записывает в поток байт последовательность байт длиной length из заданного массива байт (bytes), начиная со смещения offset (индекс отсчитывается от нуля).

Если параметр length опущен, применение длины по умолчанию, равной 0, приведет к тому, что метод будет записывать весь буфер, начиная со смещения offset. Если также опустить параметр offset, будет записываться весь буфер.
Пример реализации:
Код AS3:

myFirstByteArray.writeUTFBytes("123");
mySecondaryByteArray.writeUTFBytes("456");
myFirstByteArray.writeBytes(mySecondaryByteArray);
trace(myFirstByteArray); //123456


ZicoRio 12.12.2012 09:40

Дык в том-то и дело что я так пробовал у меня на третьей строке
зависает без сообщения об ошибке (debug версия плейера).
Я так понял, что это не катит....

Добавлено через 2 минуты
В чем может быть дело - не понимаю...

КорДум 12.12.2012 09:50

Хм. Телепаты только что вынесли вердикт. Наверное у Вас ошибка в коде. Код в студию.

ZicoRio 12.12.2012 10:16

улыбнуло Ж))

....
Код AS3:

addilen=10;
txt=co.readUTFBytes(addilen);
var ty:int=int(txt.substr(5,1));
if (ty===1){
        addinfo.writeUTFBytes('AAA');//<=== проверил - все ок
}else if(ty===2){
        addinfo.writeUTFBytes('BBB');//<=== проверил - все ок
}
addinfo.writeBytes(co,addilen);//<=== виснет вот тут

....

FlashRus 12.12.2012 11:05

Код нужно оформлять соответствующими тегами.

Что лежит в co??? Оссобенно интерестно, если там вообще что-то после 10-го байта?
Нужно больше листинга!

ZicoRio 12.12.2012 12:20

пардон за код

в co - соответственно ByteArray, все проверил - не пустой
ниже в коде я его и обрабатываю, поэтому и не стал разжевывать.
если не вставлять UTF => addinfo.writeUTFBytes, то все работает нормально,
а вот с предварительной вставкой никак.

а кто-нить попробовал у себя такой код играет или нет?

FlashRus 12.12.2012 12:34

Цитата:

а кто-нить попробовал у себя такой код играет или нет?
Вы больше кода приведите.

ZicoRio 12.12.2012 12:48

Вот рабочая функция,
а если раскоментировать строки - все привет...

Код AS3:

private function func1(co:ByteArray):ByteArray{
        var addinfo:ByteArray=new ByteArray();
        co.readBytes(addinfo,0,22);
        co.position=0;
        if (addinfo.toString().substr(0,2)=='55'){
                var addicontlen:String=addinfo.toString().substr(2,10);
                addinfo.clear();
                var addilen:uint=22;
                for(var i:int=0;i<10;i++){
                        if (addicontlen.substr(i,1)!=='0'){
                                addilen+=uint(addicontlen.substr(i));
                                break;
                        }
                }
                ob_req.txt=co.readUTFBytes(addilen);
                var ty:int=int(ob_req.txt.substr(12,1));
                if (ty===1){
                        //addinfo.writeUTFBytes('AAA');
                }else if(ty===2){
                        //addinfo.writeUTFBytes('BBB');
                }
                addinfo.writeBytes(co,addilen);
                return addinfo;
        }
        ob_req.txt='';
        return co;
}


FlashRus 12.12.2012 13:15

Для начала.....
Код AS3:

var addinfo:ByteArray=new ByteArray();
co.readBytes(addinfo,0,22);

Вы пытаетесь сделать чтение из пустого ByteArray'а. Причём именно 22 байта. Откуда им там взяться, если вы только-что вызвали его конструктор? Он пуст!


А что вы хотите сделать то?

ZicoRio 12.12.2012 13:21

ну какого пустого - я в пустой пишу!
говорю же - функция РАБОЧАЯ!

Добавлено через 54 минуты
Ну как!??
Неужели никто и ничего и никак??

FlashRus 12.12.2012 15:25

Я вам ещё раз повторяю!
Вы пытаетесь считать пустой ByteArray.

Смотрим пошагово....
Описали переменную и дали ей новый ПУСТОЙ ByteArray.
Код AS3:

var addinfo:ByteArray = new ByteArray();

Ура - теперь у нас есть чистый, девственный экземпляр класса ByteArray.


Берём другой ByteArray (неважно - пустой он или нет) и пытаемся записать в него ровно 22 байта с нулевой позиции из addinfo (нашего наичистейшего массива байтов).
Код AS3:

co.readBytes(addinfo,0,22);

Теперь вопрос (та-да-да-да):
Откуда у нас добавятся байты????
Что-же будет в нашем co???



Могу объяснить совсем на пальцах.
Берём ведёрко с чем нибудь (а может и ни с чем), берём второе ведёрко (100% - пустое) и начинаем перекладывать из второго ведёрка в первое его содержимое. Что же будет в первом ведёрке, после того как мы завершим перекладывать содерижмое из второго???

ZicoRio 12.12.2012 19:16

Дааа - буду краток, вы просто не правильно понимаете данную строку кода.
В ней идет чтение из co и запись в addinfo (который действительно пустой, т.к. только что создан).

В принципе достаточно того, что я сказал, что функция полностью рабочая
когда две строки (в нижней части) закоментированы.

iNils 12.12.2012 19:48

Цитата:

Сообщение от ZicoRio (Сообщение 1109315)
улыбнуло Ж))

....
Код AS3:

addilen=10;
txt=co.readUTFBytes(addilen);
var ty:int=int(txt.substr(5,1));
if (ty===1){
        addinfo.writeUTFBytes('AAA');//<=== проверил - все ок
}else if(ty===2){
        addinfo.writeUTFBytes('BBB');//<=== проверил - все ок
}
addinfo.writeBytes(co,addilen);//<=== виснет вот тут

....

Чему равен addilen? Что значит виснет? Ошибка какая-то? Какая?
Цитата:

а кто-нить попробовал у себя такой код играет или нет?/
Работает.

ZicoRio 13.12.2012 05:12

iNils - вот еще раз полностью функция.
Если строки НЕ закомментированы, то в указанном месте просто виснет (прекращает выполнятся код)
- без ошибок, без каких-то сообщений.
Пробовал try - catch - ничего не выдает.
Если две строки ЗАкомментированы (как показано), то все работает.

co - на входе примерно 2KB.
Flash Player (debug версия) 11,5,502,110

Код AS3:

private function func1(co:ByteArray):ByteArray{
        var addinfo:ByteArray=new ByteArray();
        co.readBytes(addinfo,0,22);
        co.position=0;
        if (addinfo.toString().substr(0,2)=='55'){
                var addicontlen:String=addinfo.toString().substr(2,10);
                addinfo.clear();
                var addilen:uint=22;
                for(var i:int=0;i<10;i++){
                        if (addicontlen.substr(i,1)!=='0'){
                                addilen+=uint(addicontlen.substr(i));
                                break;
                        }
                }
                ob_req.txt=co.readUTFBytes(addilen);
                var ty:int=int(ob_req.txt.substr(12,1));
                if (ty===1){
                        //addinfo.writeUTFBytes('AAA');
                }else if(ty===2){
                        //addinfo.writeUTFBytes('BBB');
                }
                addinfo.writeBytes(co,addilen);// <=виснет здесь если раскомментировать строки выше
                return addinfo;
        }
        ob_req.txt='';
        return co;
}

addilen - в итоге всегда разный, но к примеру 425 байтов
Просьба прогнать у себя именно данную функцию и сообщить
работает ли если строки РАСкомментированы.

iNils 13.12.2012 05:29

Работает.
Передаваемый в функцию байт массив содержал строку 55_qwertyuio1_asdfghjk_zxcvbnm, функция вернула AAA_zxcvbnm. Если передавать 55_qwertyuio2_asdfghjk_zxcvbnm, то вернет BBB_zxcvbnm.

ZicoRio 13.12.2012 06:48

Действительно спасибо! что потестили, данный функционал мне шипко
нужен - может при моих размерах массива глючит плейер, буду разбираться.
Еще раз спасибо!

Добавлено через 30 минут
С небольшими строчками (массивами байтов) действительно все правильно работает
а с моими размерами - глюк.
Вот такая вот жалость...:((

FlashRus 13.12.2012 08:52

А сколько байт длина?

iNils 13.12.2012 09:32

Цитата:

Сообщение от ZicoRio (Сообщение 1109517)
С небольшими строчками (массивами байтов) действительно все правильно работает
а с моими размерами - глюк.
Вот такая вот жалость...:((

Приведите пример строки, с которой не работает.

ZicoRio 13.12.2012 10:36

co - на входе примерно 2 килобайта.
addilen - в итоге всегда разный, но к примеру 425 байтов

Добавлено через 8 минут
это не строка, это swf-файл, я таким образом
локализацию своего приложения прикручиваю.
Ну и разные махинации потом...

Добавлено через 10 минут
я попозже еще помучаюсь - отпишусь.

Добавлено через 50 часов 11 минут
Короче пока так и не разобрался.
Если файл берется из файловой системы, то все ок!
А если загружается по сети, то стоп обработке.
Потом может домучаю :)

ZicoRio 16.12.2012 14:11

Фуфф.
 
Фуфф.
С плеером все впорядке!
Это у себя сразу не разглядел цепочку условий.
Короче все нормально работает, всем спасибо.


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

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