2012-06-19 2 views
4

Я хочу создать 1MB строку для теста, поэтому я writed код следующим образом:Что такое хороший способ создать 1MB String?

public final static long KB  = 1024; 
public final static long MB  = 1024 * KB; 
public static void main(String[] args){ 
    String text_1MB=createString(1*MB); 
} 
static String createString(long size){ 
    StringBuffer o=new StringBuffer(); 
    for(int i=0;i<size;i++){ 
     o.append("f"); 
    } 
    return o.toString(); 
} 

Я чувствую, что этот метод createString не хорошо и глупо

Любая идея, чтобы оптимизировать метод createString?

+0

Обратите внимание, что эта строка будет размером 2 мегабайта. – Joey

+0

привет @Joey, В чем смысл «2 MiB в размерах»? – Koerr

+1

Это строка, состоящая из символа 1048576, каждый из которых является блоком кода UTF-16. Поэтому ваша строка не имеет 1 MiB, но 2. – Joey

ответ

13

Как насчет:

char[] chars = new char[size]; 
// Optional step - unnecessary if you're happy with the array being full of \0 
Arrays.fill(chars, 'f'); 
return new String(chars); 
+1

Я думаю, что использование класса Arrays является умным, поскольку он вызывает метод только один раз, когда метод Append другого класса должен вызываться много раз. –

2

Создать массив символов и использовать new String(char[]) конструктор.

9

Вы можете просто создать большой массив символов.

char[] data = new char[1000000]; 

Если вам нужно сделать реальный String объект, вы можете:

String str = new String(data); 
+0

OP уже не использует + = в цикле - код в вопросе использует StringBuffer. –

0

Как насчет использования класса StringBuilder вместо StringBuffer? StringBuilder должен быть быстрее, поскольку он не синхронизирован, в отличие от StringBuffer.

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

2
char[] s = new char[1024 * 1000]; 
String str = String.copyValueOf(s); 
0

Используйте StringBuilder и установить емкость:

static String createString(long size){ 
    StringBuilder o=new StringBuilder(size); 
    for(int i=0;i<size;i++){ 
     o.append("f"); 
    } 
    return o.toString(); 
} 
0
new String(ByteBuffer.allocate(1024).array()); 

Выделяют 1024 байт ByteBuffer, а затем построить новую строку из своего бэк-массива.

Смежные вопросы