2010-07-21 14 views
5

मैं सर्वर में 40 एमबी फ़ाइल है और मैं ठीक काम कर रहा लगता हैस्पीड अप डाउनलोड समय

HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
c.setRequestMethod("GET"); 
c.setDoOutput(true); 
c.connect(); 
FileOutputStream f = new FileOutputStream(new File("trips.xml")); 


InputStream in = c.getInputStream(); 

byte[] buffer = new byte[1024]; 
int len1 = 0; 
while ((len1 = in.read(buffer)) != -1) { 
    f.write(buffer,0, len1); 

इस कोड का उपयोग मेरी फाइल को डाउनलोड कर रहा हूँ, लेकिन यह बहुत अधिक समय लग रहा है। क्या यह किसी भी तरह से मैं इस प्रक्रिया को तेजी से कर सकता हूं।

/Minhaz

+0

आप केवल धीमे कनेक्शन के रूप में तेज़ी से डाउनलोड कर सकते हैं। यदि आप डायलअप (56 के) पर हैं, तो अनुकूलन कोई फर्क नहीं पड़ता। और सबसे धीमा कनेक्शन आपको जरूरी नहीं होगा - यह सर्वर से सीधा संबंध नहीं है, अनुरोध वहां और पीछे जाने के लिए कई नेटवर्क पर यात्रा करते हैं। –

उत्तर

2

यह बहुत बदसूरत हैक जो पराक्रम आप एक तेजी से डाउनलोड समय देते हैं, या हो सकता है यह नहीं, आप अपने परिस्थितियों में यह परीक्षण करने के लिए होगा करता है:

प्रारंभ कई समांतर कनेक्शन (अलग धागे में?), और प्रत्येक को डेटा का एक अलग हिस्सा डाउनलोड करना चाहिए (HTTP 1.1 Range header का उपयोग करना)। कई चीजों के आधार पर जैसे कि पूर्णिमा है, या सूरज खत्म हो गया है या गुलाब खिल रहे हैं, आपको बेहतर परिणाम मिल सकते हैं क्योंकि यह आपके लिंक को एक कनेक्शन से बेहतर संतृप्त करेगा (आपके लिंक को साझा करने वाले हर किसी के खर्च के लिए, जैसे बिटटोरेंट क्या करता है)।

+0

इस प्रकार डाउनलोड त्वरक और प्रबंधक आमतौर पर काम करते हैं। मैं इसे एक बदसूरत हैक नहीं कहूंगा, मैं इसे एक बहुत अच्छा समाधान कहूंगा ;-) –

+0

@ क्रिस ठीक है, मुझे लगता है कि हिस्सा वास्तव में व्यक्तिपरक था। मैं इसे ठीक कर दूंगा। – Gianni

+0

@Gianni मुझे लगता है कि हर किसी के परिप्रेक्ष्य में आपको _sharing_ बैंडविड्थ होना चाहिए, यह निश्चित रूप से बदसूरत है ... ;-) –

3

1 KB से बड़ा इनपुट बफर का उपयोग करें। तेज़ी से आप खाली बफर, तेजी से नेटवर्क स्टैक डाउनलोड जारी रख सकते हैं। इससे मदद मिलनी चाहिए:

byte[] buffer = new byte[50*1024]; 
+1

डाउनलोड गति पर अच्छी वृद्धि पाने का यह सबसे आसान तरीका है; शुरुआत में मैं 1kb बफर का उपयोग कर रहा था, फिर 8kb, लेकिन फिर मैंने 50kb की कोशिश की और यह एक महत्वपूर्ण अंतर बना। – brack

+0

बेहद व्यावहारिक समाधान –

1

मुझे एक ही समस्या है, इस कोड के साथ आया। पिछले संस्करणों की तुलना में तेज़ था मैंने कोशिश की है। मैं उस फ़ाइल से अधिक बफर आकार निर्दिष्ट करता हूं जिसे मैं लोड करने जा रहा हूं। आशा करता हूँ की ये काम करेगा।

public String load(String url, int bufferSize){ 

    try { 
     URL myURL = new URL(url); 
     URLConnection ucon = myURL.openConnection(); 
     ucon.setRequestProperty("Connection", "keep-alive"); 
     InputStream inputStream = ucon.getInputStream(); 
     BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); 
     ByteArrayBuffer byteArrayBuffer = new ByteArrayBuffer(bufferSize); 
     byte[] buf = new byte[bufferSize]; 
     int read; 
     do { 
      read = bufferedInputStream.read(buf, 0, buf.length); 
      if (read > 0) 
       byteArrayBuffer.append(buf, 0, read); 
     } while (read >= 0); 
     return new String(byteArrayBuffer.toByteArray()); 
    } catch (Exception e) { 
     Log.i("Error", e.toString()); 
    } 
    return null; 
} 
+0

यह सही लाइनों के साथ है, जिसमें एक बड़ा बफर आकार की आवश्यकता है। हालांकि, किसी को मोबाइल उपकरणों पर स्मृति बाधाओं के कारण दो मेगाबाइट्स से बड़ी फ़ाइलों के लिए फ़ाइल आकार से अधिक बफर आकार से बचना चाहिए। – brack

संबंधित मुद्दे