Desidero leggere un grande InputStream e restituirlo come stringa. Questo InputStream è grande. Quindi, normalmente ci vuole molto tempo e molta memoria mentre è in esecuzione. Il seguente codice è quello che ho sviluppato finora. Ho bisogno di convertire questo codice come fa il lavoro in un tempo minore consumando meno memoria.Ottimizzazione delle prestazioni di lettura di un grande InputStream in java
Puoi darmi qualche idea per farlo.
BufferedReader br =
new BufferedReader(
new InputStreamReader(
connection.getInputStream(),
"UTF-8")
);
StringBuilder response = new StringBuilder(1000);
char[] buffer = new char[4096];
int n = 0;
while(n >= 0){
n = br.read(buffer, 0, buffer.length);
if(n > 0){
response.append(buffer, 0, n);
}
}
return response.toString();
Grazie!
cos'è un "lotto" di memoria. È inevitabile che ti serva abbastanza memoria per contenere l'intera stringa che stai costruendo. Stai vedendo qualcosa di drammaticamente peggiore di quanto ti aspetteresti? – djna
cosa stai leggendo? – dogbane
Sì. è vero che la memoria consumata è proporzionale alla dimensione della risposta (String). Ma qui, sta per usare la memoria in modo efficace (Riducendo l'uso di memoria non necessario, ecc.). Per un esempio qui ho usato StringBuilder invece di accodare l'input a una stessa String usando + 's (come str = str + newStr)) per ridurre l'uso di memoria non necessario. In questo modo, mi aspettavo ulteriori idee per rendere il mio codice molto migliore gestendo la memoria e velocizzando il codice. – Namalak