我想读取带缓冲区的输入流,并将每个缓冲区附加到字符串,直到流为空。
char[] buffer = new char[32];
while ((bytesRead = streamReader.read(buffer, 0, 32)) != -1)
message += new String(buffer);
我找不到String
的方法直接附加一个字符数组并选择了这个。有没有办法知道这是浪费周期将字符数组复制到新字符串,只是立即丢弃它?
这可能是过早的优化,但它非常强烈地瞪着我。
我相信这个构造函数调用Arrays.copyOf()
。
没有。
有更有效的方法。在循环中使用java.util.StringBuilder
在执行一系列操作时效率更高。在循环中,+ =每次都会创建另一个String对象。例如,如果您要为1_000_000个字符串执行String d = a + b + c + d...
,那么您将使用1_000_000个String对象作为浪费。字符串是不可变的。
相关链接:
String concatenation: concat() vs "+" operator
场外链接但仍然与https://dzone.com/articles/string-concatenation-performacne-improvement-in-ja相关