我需要在socket中缓冲字符,循环:
string buffer;
while(!eof) {
//read character into buffer
}
现在,特别是在java中,我有两个选择。使用String和+=
运算符,虽然在java中没有运算符重载,但它在某种程度上有效。但是,字符串在Java中是不可变的,这意味着每次修改字符串时,您实际上都在创建一个新字符串。我认为在我的情况下可能会非常无效,因为可能会顺序添加许多字符(我从套接字读取等待分隔符)。
其他方式是使用某种灵活的数组,例如List
Vector
。这个可以使用.add
方法接受更多字符。但是,当然,这是一个问题,如果它真的更快 - 最后,我们还需要将数据转换为字符串。
那么:List
比String
更有效缓冲吗?如何在没有List
运算符的情况下将+
转换为String?
这种转换毫无用处:
for(int i=0,l=list.size(); i<l; i++) {
string+=list[i];
}
我可能已经在接收器循环中做了同样的事情......
答案 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)。