Cat*_*ata 33 java optimization bufferedreader
我想优化这段代码:
InputStream is = rp.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String text = "";
String aux = "";
while ((aux = reader.readLine()) != null) {
text += aux;
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何读取bufferedreader的内容并以比我上面更快的方式将其复制到String中.我需要花费尽可能少的时间.谢谢
Mic*_*rdt 82
在循环中使用字符串连接是在经典的性能杀手(因为字符串是不可变的,整个越来越大的字符串被复制为每个连接).改为:
StringBuilder builder = new StringBuilder();
String aux = "";
while ((aux = reader.readLine()) != null) {
builder.append(aux);
}
String text = builder.toString();
Run Code Online (Sandbox Code Playgroud)
dog*_*ane 26
您可以尝试Apache IOUtils.toString.这就是他们所做的:
StringWriter sw = new StringWriter();
char[] buffer = new char[1024 * 4];
int n = 0;
while (-1 != (n = input.read(buffer))) {
sw.write(buffer, 0, n);
}
String text = sw.toString();
Run Code Online (Sandbox Code Playgroud)
当BufferedReader从套接字中,有必要补充bufferedReader.ready():
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder sb= new StringBuilder();
String line = "";
while (br.ready() && (line = br.readLine()) != null) {
sb.append(line + "\r\n");
}
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64693 次 |
| 最近记录: |