我正在使用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();

提前致谢

最佳答案



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

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/

10-09 07:06