35

このコードを最適化したい:

InputStream is = rp.getEntity().getContent();      

BufferedReader reader = new BufferedReader(new InputStreamReader(is));

String text = "";
String aux = "";

while ((aux = reader.readLine()) != null) {
        text += aux;
      }

問題は、 bufferedreader のコンテンツを読み取り、上記よりも速く文字列にコピーする方法がわからないことです。私はできるだけ時間を費やす必要はありません。ありがとうございました

4

6 に答える 6

84

ループ内での文字列連結の使用は従来のパフォーマンス キラーです (文字列は不変であるため、連結ごとに、ますます大きくなる文字列全体がコピーされます)。代わりにこれを行います:

StringBuilder builder = new StringBuilder();
String aux = "";

while ((aux = reader.readLine()) != null) {
    builder.append(aux);
}

String text = builder.toString();
于 2011-01-12T08:46:50.973 に答える
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();
于 2011-01-12T08:57:00.877 に答える
7

Socket から読み取る場合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();
于 2014-10-18T15:23:36.490 に答える
-1

StringBufferを使用できます

while ((aux = reader.readLine()) != null) {
     stringBuffer.append(aux);
}
于 2011-01-12T08:55:13.763 に答える