java - 这是将字符数组附加到字符串的最有效方法吗?

标签 java arrays string char

我想读取带有缓冲区的输入流,并将每个缓冲区附加到一个字符串,直到流为空。

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/

相关文章:

java - 如何对 int[] 数组求和

python - 在 while 循环中将变量从 int 转换为 str?

java - 如何在一种方法和另一种方法中使用声明的变量。

Java swing - 可滚动 GridLayout 中的项目不可见

java - 将数组中的每个元素向下移动一个 (Java)

arrays - 获取 Swift 集合或数组中对象的下一个或上一个项目

std::string 函数中的 C++ 段错误

c++ - 字符串迭代器永远不会到达 std::string::end()

java - 如何处理丑陋的多重声明(非方法代码的代码折叠)

Java 代码在 Scanner hasNextLine 处挂起