texto - leer y escribir archivos en java
Cómo leer BufferedReader más rápido (5)
Quiero optimizar este código:
InputStream is = rp.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String text = "";
String aux = "";
while ((aux = reader.readLine()) != null) {
text += aux;
}
La cuestión es que no sé cómo leer el contenido del búferador y copiarlo en una cadena más rápido que lo que tengo arriba. Necesito pasar el menor tiempo posible. Gracias
Cuando BufferedReader
lee de Socket, es necesario agregar 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();
El uso de la concatenación de cadenas en un bucle es el asesino clásico del rendimiento (porque las cadenas son inmutables, la secuencia completa, cada vez más grande, se copia para cada concatenación). Haz esto en su lugar:
StringBuilder builder = new StringBuilder();
String aux = "";
while ((aux = reader.readLine()) != null) {
builder.append(aux);
}
String text = builder.toString();
Escribí una función simple para hacer esto usando StringBuilder y While loop con la captura de IOException dentro.
public String getString(BufferedReader bufferedReader) {
StringBuilder stringBuilder = new StringBuilder();
String line = null;
do {
try {
if ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append(System.lineSeparator());
}
} catch (IOException e) {
e.printStackTrace();
}
} while (line != null);
return stringBuilder.toString();
}
Puedes probar Apache IOUtils.toString . Esto es lo que ellos hacen:
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();
Puedes usar StringBuffer
while ((aux = reader.readLine()) != null) {
stringBuffer.append(aux);
}