java - Readline 太慢了——还有更快的吗?

标签 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();

提前致谢

最佳答案

to create one long string that gets created from the readers.

您是否有机会这样做来创建您的“长字符串”?

String string;
while(...) 
 string+=whateverComesFromTheSocket;

如果是,则改成

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

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

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

关于java - Readline 太慢了——还有更快的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756417/

相关文章:

java - System.out.print ('\r' ) 不起作用

javascript - 基于字符串、IE加载并解析xml

java - 无法使用 Apache POI 3.13 解析 CTDataModel

java - web.xml 中项目的 servlet-mapping 属性不位于 webapps 的顶层

java - servlet java 中的错误

java - 我正在尝试从 JAVA 中的 ip 地址获取位置信息,但我收到了 java.net.SocketException : Connection reset error

java - 如何反射(reflect)类(class)偏好的变化?

java - 检查对象是否存在被 webdrivereventlistener 捕获时,Selenium webdriver 出错?

Java - 如何在特定条件下获得最佳元素列表

c# - 如何更改新 XML 文档中属性的值?