8

我想为基准测试创建 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方法吗?

4

7 回答 7

18

怎么样:

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);
于 2012-06-19T07:43:58.440 回答
10

您可以简单地创建一个大型字符数组。

char[] data = new char[1000000];

如果你需要制作一个真实的String对象,你可以:

String str = new String(data);
于 2012-06-19T07:45:47.670 回答
4
char[] s = new char[1024 * 1000];
String str = String.copyValueOf(s);
于 2012-06-19T08:04:02.147 回答
2

创建一个字符数组并使用new String(char[])构造函数。

于 2012-06-19T07:44:13.007 回答
0

使用类 StringBuilder 代替 StringBuffer 怎么样?StringBuilder 应该更快,因为它不像 StringBuffer 那样同步。

也许您可以通过设置编译器标志来增加堆内存和虚拟内存来提高性能。它肯定不会受伤。

于 2012-06-19T07:58:22.817 回答
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();
}
于 2012-06-19T08:14:31.840 回答
0
new String(ByteBuffer.allocate(1024).array());

分配一个 1024 字节的 ByteBuffer,然后从它的支持数组中构造一个新的 String。

于 2017-01-01T22:52:08.383 回答