Readline太慢 - 什么更快?

but*_*red 5 java xml servlets bufferedreader inputstreamreader

我正在使用BufferedReader和InputStreamReader从流读入来创建一个从读者创建的长字符串.它最多可达100,000行,然后抛出500错误(服务器上的调用失败).我不确定是什么问题,有什么比这个方法更快?它的工作线路数千,但我正在使用大型数据集.

BufferedReader in = new BufferedReader(new InputStreamReader(newConnect.getInputStream()));
String inputLine;               
String xmlObject = "";
StringBuffer str = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
    str.append(inputLine);
    str.toString();
}       
in.close();
Run Code Online (Sandbox Code Playgroud)

提前致谢

Jag*_*gat 8

创建一个从读者创建的长字符串.

你有没有机会这样做来创造你的"长串"?

String string;
while(...) 
 string+=whateverComesFromTheSocket;
Run Code Online (Sandbox Code Playgroud)

如果是,则将其更改为

StringBuilder str = new StringBuilder(); //Edit:Just changed StringBuffer to StringBuilder
while(...)
 str.append(whateverComesFromTheSocket);
String string = str.toString(); 
Run Code Online (Sandbox Code Playgroud)

字符串对象是不可变的,当你执行str + ="something"时,将重新分配内存并将str +"something"复制到新分配的区域.这是一项昂贵的操作,运行51,000次是一件非常糟糕的事情.

StringBuffer和StringBuilder是String的可变兄弟和StringBuilder,非并发比StringBuffer更有效.