java BufferedReader को तेज़ी से कैसे पढ़ा जाए




optimization (4)

आप अपाचे 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();

मैं इस कोड को अनुकूलित करना चाहता हूं:

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

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

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

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

बात यह है कि मुझे नहीं पता कि bufferedreader की सामग्री को कैसे पढ़ा जाए और इसे ऊपर की तुलना में स्ट्रिंग में कॉपी करें। मुझे जितना संभव हो उतना समय बिताना होगा। धन्यवाद


मैंने स्ट्रिंगबिल्डर का उपयोग करके ऐसा करने के लिए एक सरल कार्य लिखा और अंदर IOException को पकड़ने के साथ लूप।

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();
}

जब 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();

एक लूप में स्ट्रिंग कॉन्सटेनेशन का उपयोग क्लासिक प्रदर्शन हत्यारा है (क्योंकि स्ट्रिंग्स अपरिवर्तनीय हैं, संपूर्ण, तेजी से बड़ी स्ट्रिंग प्रत्येक concatenation के लिए प्रतिलिपि बनाई गई है)। इसके बजाए ऐसा करें:

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

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

String text = builder.toString();






bufferedreader