Единственный объект String для большой строки в Java - PullRequest
0 голосов
/ 10 марта 2012

Полезно ли хранить большую строку (более 300000 символов) в одном объекте String в случае управления памятью и производительности, или есть лучший способ?

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Объяснение Йохана Шёберга хорошо:

«Как использовать строку, которая будет определять практику».

Если 300 000 символов, составляющих ваш объект String, не находятся в исходном файле Java, заключенном в двойные кавычки (""), например, находясь во внешнем файле, вы можете использовать различные методы для получения фрагмента содержимого String по фрагменту или в целом. Взгляните на этот пример:

FileInputStream fis = new FileInputStream( "yourFile.txt" );
BufferedInputStream bis = new BufferedInputStream( fis );
byte [] buffer = new byte [ 8 ];
int bytesRead = 0;
String chunk = "";

while ( ( bytesRead = bis.read( buffer ) ) != -1 )
    chunk = new String( buffer, 0, bytesRead );

Предполагая, что вы обрабатываете возможные исключения, в приведенном выше коде вы получаете строку размером 8 байт каждый раз, когда вы входите в цикл while. Таким образом, изменяя размер байтового массива, равный 8 в этом коде, вы можете изменить размер чанка и использовать чанки в любом другом месте, распечатывать их и т. Д.

В вашем примере вы говорите, что ваша строка содержит около 300000 символов. Поэтому, установив размер байтового массива buffer равным 4 x 300 000 = 1 200 000 , вы сможете получить фрагмент строки, содержащий все символы.

1 голос
/ 10 марта 2012

Java представляет строки с использованием кодировки UTF-16, следовательно, в худшем случае каждый символ составляет 4 байтов. Это дает вам примерно 4*300000/1024/1024 ~ 1.14MB строку, что само по себе неплохо.

Это то, как вы используете строку, которая определяет практику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...