我应该使用Vector <char>作为字符串缓冲区吗?如何有效地将其转换为String?</char>

时间:2014-04-26 18:56:05

标签: java buffer

我需要在socket中缓冲字符,循环:

string buffer;
while(!eof) {
  //read character into buffer

}

现在,特别是在java中,我有两个选择。使用String和+=运算符,虽然在java中没有运算符重载,但它在某种程度上有效。但是,字符串在Java中是不可变的,这意味着每次修改字符串时,您实际上都在创建一个新字符串。我认为在我的情况下可能会非常无效,因为可能会顺序添加许多字符(我从套接字读取等待分隔符)。
其他方式是使用某种灵活的数组,例如List Vector。这个可以使用.add方法接受更多字符。但是,当然,这是一个问题,如果它真的更快 - 最后,我们还需要将数据转换为字符串。

那么:ListString更有效缓冲吗?如何在没有List运算符的情况下将+转换为String?

这种转换毫无用处:

for(int i=0,l=list.size(); i<l; i++) {
    string+=list[i];
}

我可能已经在接收器循环中做了同样的事情......

1 个答案:

答案 0 :(得分:4)

要缓存String,请使用StringBuilder。它就是为此设计的。

StringBuilder buffer = new StringBuilder();
while(!eof) {
  //read character into buffer
  buffer.append(someCharacter);
}
String finalString = buffer.toString();

还存在StringBuffer类,区别在于后者(StringBuffer)是同步的,而StringBuilder则不是。

但是在多线程的情况下,我建议您使用StringBuilder并同步它(从@PeterLawrey读取this article)。