單元測試、效能基準測試、網路協議模擬等需生成指定大小字串/位元組陣列。
StringBuilder sb = new StringBuilder(10 * 1024 * 1024); // 預分配 10MB 容量,避免擴容
for (int i = 0; i < 10 * 1024 * 1024; i++) {
sb.append('a');
}
String str = sb.toString(); // 獲取完整字串
new StringBuilder(initialCapacity) 避免多次擴容複製,大幅提升效能。append(char) 比 append(String) 更輕量。// 取前 1MB
byte[] oneMB = str.substring(0, 1024 * 1024).getBytes(StandardCharsets.UTF_8);
byte[] bytes = new byte[10 * 1024 * 1024];
Arrays.fill(bytes, (byte) 'a');
// 取 1MB
byte[] oneMB = Arrays.copyOfRange(bytes, 0, 1024 * 1024);
| 方式 | 耗時 | 記憶體峰值 |
|---|---|---|
| StringBuilder 預分配 | ~50ms | ~20MB |
| byte[] Arrays.fill | ~5ms | ~10MB |
| String 連接 (+=) | 極慢(O(n²)) | 極高 |
測試資料生成首選 byte[] + Arrays.fill;需字串操作時用 StringBuilder 並預分配容量。嚴禁在迴圈中使用 += 拼接字串。