Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该使用Vector<;char>;字符串缓冲区?如何有效地将其转换为字符串?_Java_Buffer - Fatal编程技术网

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

Java 我应该使用Vector<;char>;字符串缓冲区?如何有效地将其转换为字符串?,java,buffer,Java,Buffer,我需要在循环中缓冲套接字中的字符: string buffer; while(!eof) { //read character into buffer } 现在,特别是在java中,我有两个选择。或者使用一个字符串和+=操作符,尽管java中没有操作符重载,但它还是可以工作的。然而,字符串在Java中是不可变的,这意味着每次修改字符串时,实际上都在创建一个新字符串。我认为这在我的情况下可能会非常无效,因为许多字符可能会按顺序添加(我正在从套接字读取,等待分隔符)。 另一种方法是使用某种灵

我需要在循环中缓冲套接字中的字符:

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

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

那么:
List
在缓冲方面是否比
String
更有效?如何将
列表
转换为没有
+
运算符的字符串

这种转换是无用的:

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

对于(int i=0,l=list.size();i对于缓冲
字符串
,请使用。它是为此而设计的

StringBuilder buffer = new StringBuilder();
while(!eof) {
  //read character into buffer
  buffer.append(someCharacter);
}
String finalString = buffer.toString();
还有一个
StringBuffer
类,区别在于后者(
StringBuffer
)是同步的,而
StringBuilder
不是


但在多线程的情况下,我建议您使用
StringBuilder
并对其进行同步(从@PeterLawrey读取)。

要缓冲
字符串,请使用。它是专门为此设计的

StringBuilder buffer = new StringBuilder();
while(!eof) {
  //read character into buffer
  buffer.append(someCharacter);
}
String finalString = buffer.toString();
还有一个
StringBuffer
类,区别在于后者(
StringBuffer
)是同步的,而
StringBuilder
不是


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

除非是为了与旧库的互操作性,否则在新代码中永远不应该使用
Vector
。我想知道这是为什么?
Vector
基本上已经被弃用了很长一段时间,详细信息在Javadoc中进行了解释。它和
Hashtable
是在中被取代的重量级同步实现Java 1.2.Si同步
列表
(使用
同步
块)与
Vector
是一样的吗?而且,你不能有原语的集合。所以
Vector
是无效的,但是
Vector
,或者更好的是,
List
,是有效的。顺便说一句,我现在看到
Vector
对象的唯一时间是在我使用10年前的代码时。你永远不要使用
Vector
在新代码中,除非它是为了与传统库的互操作性。我想知道,这是为什么?
Vector
在很长一段时间内基本上被弃用,详细内容在Javadoc中解释。它和
Hashtable
是在Java 1.2中被取代的重量级同步实现。Si synchronized
List
(使用
synchronized
块)与
Vector
是一样的吗?而且,你不能有原语的集合。所以
Vector
是无效的,但是
Vector
,或者更好的是,
List
,是有效的。顺便说一句,我现在看到
Vector
对象的唯一时间是当我使用10年前的代码时。我可以循环使用字符串生成器吗ing for loop?@TomášZato是的,您可以。阅读该类的文档,您将找到所有有助于完成此任务的方法。我可以使用for loop循环字符串生成器吗?@TomášZato是的,您可以。阅读该类文档,您将找到所有有助于完成此任务的方法。