我想读取带有缓冲区的输入流,并将每个缓冲区附加到一个字符串,直到流为空。
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
关于java - 这是将字符数组附加到字符串的最有效方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564444/