2012-06-19 92 views
4

我想創建一個基準1MB字符串,所以我所著的代碼如下:什麼是創建1MB字符串的好方法?

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 MiB。 – Joey

+0

hi @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,然後構造新的字符串出其背襯陣列。

相關問題