Android bir Giriş akışı verimli bir şekilde Okuma
Bir HTTP yapıyorum bir android uygulaması için bir web sitesi için bir get isteği yapıyorum.
Bir DefaultHttpClient kullanarak ve HttpGet istek sorunu için kullanıyorum. Varlık yanıtı ve bu sayfanın html almak için İnputStream bir nesne elde etmek için mi?
Ben daha sonra aşağıdaki gibi yaparak cevap dolaşmak
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
String x = "";
x = r.readLine();
String total = "";
while(x!= null){
total = x;
x = r.readLine();
}
Ancak bu, korkunç derecede yavaş.
Bu verimsiz mi? Büyük bir web sayfası yükleniyor değilimwww.cokezone.co.ukdosya boyutu büyük değil. Daha iyi bir yolu bunu yapmak için vardır?
Teşekkürler
Andy
CEVAP
Kodunuzda sorun String
ağır nesneleri bir sürü oluşturma, tüm içeriğini kopyalama ve onlarla işlem yapıyor. Büyük ölçüde her String
yeni nesneler oluşturmak önlemek StringBuilder
, ekleme kullanmalısınız onu geliştirmek için, doğrudan kopyalama olmadan iç char dizileri kullanır. Dava için uygulanması böyle bir şey olabilir:
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
Bundan sonra String
dönüştürme olmadan bir çok vaka için CharSequence
total
kullanabilirsiniz. Eğer bunu yapmanız gerekiyorsa, döngü sonra total.toString()
kullanın.
Bunu daha iyi açıklamaya çalışacağım...
a = b
(a = a b
),a
b
Dizeleri, 15 ** kopyalarve16* *karakter yeni bir nesne (de içerena
, kopyalama olduğunu unutmayın-küçükString
) birikmiş, ve her yineleme üzerinde bu kopya yapıyorsun. Bazı Kbs kopyalama ve bazı nesneler oluşturma süreleri çok pahalı.a
StringBuilder
, ekler doğrudanb
a.append(b)
, Her yineleme üzerinde biriken Dize kopya yok yani 23 ** içindekiler.
Bir şekilde Android üzerinde Python ça...
Nasıl verimli bir şekilde anahtarları/...
Ve en sağlam, en basit şekilde kullanı...
't take klavye giriş Android emül...
Kolay bir şekilde Android bir Görünüm ...