我正在使用 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/