我想读取带有缓冲区的输入流,并将每个缓冲区附加到字符串,直到该流为空。
char[] buffer = new char[32];
while ((bytesRead = streamReader.read(buffer, 0, 32)) != -1)
message += new String(buffer);
我找不到String
的方法来直接附加一个字符数组,并为此选择了。有没有办法知道这是否会浪费周期将字符数组复制到新字符串,而只是立即丢弃它?
这可能是过早的优化,但它非常强烈地瞪着我。
我相信此构造函数会调用Arrays.copyOf()
。
答案 0 :(得分:1)
否。
有更有效的方法。在循环中使用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
答案 1 :(得分:-1)
我会做这样的事情:
90% opacity