Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   максимальный размер String (http://www.flasher.ru/forum/showthread.php?t=158118)

gnus 15.06.2011 16:19

максимальный размер String
 
вопрос, собственно, в этом: есть ли ограничение на максимальный размер String? например строку размером в 280Мб не создаёт.

t4arty 15.06.2011 16:24

280мб - это жесть :) делите строку на несколько и клейте их потом, где надо.

DaFive 15.06.2011 16:29

280 МБ в стринге? Мсье знает толк в извращениях.

gnus 15.06.2011 16:30

собственно мне надо такое: грузится в bytearray файл текстовый. его надо порезать на строки. я предполагал делать так:
Код AS3:

var str:String=ba.readMultiByte(ba.length, 'windows-1251');
var arrCSV:Array=str.split('\r\n');

как мне сделать это же, но без предварительного перевода массива в строку?

saikspaik 15.06.2011 16:34

Цитата:

Сообщение от gnus (Сообщение 1003899)
например строку размером в 280Мб не создаёт.

Ну и строка, это все сочинения Пушкина что-ли? :)
Зачем такие строки, если не секрет

gnus 15.06.2011 16:37

Цитата:

Сообщение от saikspaik (Сообщение 1003916)
Ну и строка, это все сочинения Пушкина что-ли? :)
Зачем такие строки, если не секрет

ответ выше

DaFive 15.06.2011 16:40

Грузить по частям. Да и вообще зачем именно одна строка? Во-первых вся строка в 280 метров - жесть, да еще и операция split - туда же. Конкретно задача какая? Что загрузить это понятно. Вопрос в другом: для чего именно это нужно и именно в таком представлении (1 строка - 1 массив)?

gnus 15.06.2011 16:43

я же описал мою задачу:

Цитата:

Сообщение от gnus (Сообщение 1003909)
собственно мне надо такое: грузится в bytearray файл текстовый. его надо порезать на строки.

на выходе надо иметь массив строк из этого файла.

goodguy 15.06.2011 16:43

Если я не ошибаюсь, во флеш плеере вшито ограничение на размер загружаемого файла в 100 мегабайт.

gnus 15.06.2011 16:45

ошибаетесь. файл в 280мб успешно грузится. уточню: приложение AIR

DaFive 15.06.2011 16:47

По частям грузите тогда, раз нужно. 1 массив из хреновой тучи элементов не самый удачный подход.

alatar 15.06.2011 16:52

Цитата:

Сообщение от gnus (Сообщение 1003909)
я предполагал делать так:

Загруженный ByteArray — 280 Мб (Текст в кодировке win-1251, предположительно на русском) + String ~280Мб * (от 2-х до 4-х) (в UTF-8 символ занимает от одного до 4-х байт, по стандарту может и до шести) + сколько-то памяти уйдет при перекодировке + массив (Чуть больше чем полученная строка).
Памяти не напасетесь. Не говоря уже о том, как это будет работать.

gnus 15.06.2011 16:56

критиковать "предполагаемый" подход ни к чему. то, что это не работает я уже написал в первом посте.
просьба была - посоветовать, как решить эту задачу.

DaFive 15.06.2011 17:00

Что значит критиковать не надо, если подход неверен с самого начала. Вы скажите для чего это нужно? Еще раз повторю - загрузить нужно, мы это поняли. Что вы будете делать с этим массивом, ведь в него вы даже (если загрузите строку) не переведете эту самую строку методом split. Вы просто не дождетесь.

Искать фориком по массиву? - труба. Чтобы посоветовать решение - нужна задача.

cleptoman 15.06.2011 17:01

про 100 мегабайт - это гарантированный от Адоби аплоад через FileReference ...

по сабжу - а зачем вам столько много и сразу?

gnus 15.06.2011 17:17

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

КорДум 15.06.2011 17:22

Цитата:

Сообщение от alatar (Сообщение 1003925)
Загруженный ByteArray — 280 Мб (Текст в кодировке win-1251, предположительно на русском) + String ~280Мб * (от 2-х до 4-х) (в UTF-8 символ занимает от одного до 4-х байт, по стандарту может и до шести) + сколько-то памяти уйдет при перекодировке + массив (Чуть больше чем полученная строка).
Памяти не напасетесь. Не говоря уже о том, как это будет работать.

Вот ответ.

carrotoff 15.06.2011 17:24

опять не успел.)

Вам не хватит памяти на обработку такой структуры

КорДум 15.06.2011 17:27

Не знаю, откуда столько текста, но может быть вы посмотрите в сторону БД? Каждая строка имеет свой индекс, загружаете только нужные.

Aquahawk 15.06.2011 17:27

Не вижу проблемы. Берёте и ищете по массиву байты который обозначают перевод строки, там есть такое. Определяете диапазон, переставляете указатель на начало этого диапазона и читаете readUTFBytes(length:uint):String. Возможно это будет падать, тогда попробуйте байты для строки скопировать в другой временный bytearray;

gloomyBrain 15.06.2011 17:27

Грузите через URLStream. Читайте байты в ByteArray по мере загрузки. Проверяйте каждый загруженный байт на равенство \n. Как только этот байт получен - все следующие байты начать писать в новый ByteArray. Когда надо будет выводить на экран - будет понятно, когда надо раскодировать очередной ByteArray - раскодируем и выводим

Aquahawk 15.06.2011 17:28

В итоге конечно потребуется гиг памяти, т.к. в строке utf , но работать должно.

wvxvw 15.06.2011 21:21

Ну есть же в AIR FileStream читайте из него частями, по сколько-то байт за раз используя openAsync + readAhead. Так любая другая программа работает, никто не будет пихать в память солько много информации. Это все равно, что на обычном мониторе пытаться показать картинку 10240х7680 пикселов (в смысле, где-то в 100 раз больше, чем физически можно показать).


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

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