SORU
22 Mart 2010, PAZARTESİ


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
30 Mart 2010, Salı


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çeren a, 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ğrudan b a.append(b), Her yineleme üzerinde biriken Dize kopya yok yani 23 ** içindekiler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bigky226

    bigky226

    11 HAZİRAN 2006
  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • DavidParody

    DavidParody

    17 EKİM 2009