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)
提前致谢
创建一个从读者创建的长字符串.
你有没有机会这样做来创造你的"长串"?
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更有效.