Подтвердить что ты не робот

Каков максимальный объем данных, который может содержать строка в java?

Я знаю, что это может быть действительно noobish qustion, но я не нашел хорошего надежного ресурса, где я могу получить эту информацию.

В приложении Android я пытаюсь хранить данные в String, просто добавляя их с большим количеством данных. И, наконец, когда пользователь закрывает приложение или нажимает кнопку "Сохранить", я записываю его в файл .csv данных.

Я хочу знать, сколько данных может содержать простую строку в java?. Таким образом, приложение не сработает, если тип данных String закончится из выделенной памяти. BTW Я попытался подчеркнуть тестовое приложение, и он работает нормально, независимо от того, сколько данных я храню в одной строке.

Adit

4b9b3361

Ответ 1

В качестве String class 'length() возвращает значение int, максимальная длина, которая будет возвращена методом, будет Integer.MAX_VALUE, которая равна 2 ^ 31 - 1 (или примерно 2 миллиарда).

Итак, теоретически вы можете иметь строку из 2 147 483 647 символов. Я не думаю, что вам нужно гораздо больше.

Однако, как @TedHopp указал в комментариях и опубликовал в своем ответе, система Android ограничивает ваше пространство кучи, опустившись до 16 МБ. Таким образом, вы никогда не сможете достичь теоретического предела и будете максимальны с помощью String где-то в диапазоне 4-64 миллионов символов.

Ответ 2

Это, вероятно, будет ограничено размером кучи, доступным для приложения. Это может варьироваться как с моделью телефона, так и с производителем/телефоном. Для устройств Android ответ здесь содержит максимальные размеры кучи для различных моделей телефонов; они варьируются от 16 до 256 МБ.

Обратите внимание, что Java хранит строки как коды UTF-16, поэтому каждый символ занимает два байта. Если вы добавляете строки напрямую или используете StringBuilder (гораздо лучше), вам иногда потребуется вдвое больше памяти: одна для хранения существующей строки и одна для хранения новой строки/буфера, когда ее нужно развернуть.

Считается, что максимальная длина строки может составлять от 4 до 64 миллионов символов в зависимости от телефона (намного ниже теоретического максимума 2 31 -1).

Ответ 3

Bill lizard ответил в этом вопросе

Вы должны иметь возможность получить строку Integer.MAX_VALUE (всегда 2147483647 (231 - 1) по спецификации Java, максимальный размер массива, который класс String использует для внутреннего хранилища) или половину максимальной кучи size (поскольку каждый символ имеет два байта), в зависимости от того, что меньше.

Однако для ваших конкатенационных последовательностей строк вы должны использовать StringBuilder, который создан для таких целей.