2010-07-21 23 views
5

mam 40 MB plik na serwer i jestem pobierania mój plik, używającSpeed ​​Up czas pobierania

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

ten kod działa poprawnie, ale wydaje się, że trwa zbyt długo. to ich sposób, w jaki mogę przyspieszyć ten proces.

/minhaz

+0

Możesz pobierać tylko tak szybko, jak najwolniejsze połączenie. Jeśli korzystasz z połączenia modemowego (56K), optymalizacja nie będzie miała znaczenia. A najwolniejsze połączenie niekoniecznie będzie Tobą - nie jest to bezpośrednie połączenie z serwerem, prośby podróżują przez liczne sieci, aby dostać się tam iz powrotem. –

Odpowiedz

2

Ten bardzo brzydki hack, który potęga daje szybsze pobranie czasu, a może nie, będziesz musiał przetestować go pod swoimi warunkami:

Startu kilka równoległych połączeń (w osobnych wątkach?), a każdy powinien pobrać inny fragment danych (używając HTTP 1.1 Range header). Zależnie od wielu rzeczy, takich jak czy jest pełnia księżyca, albo słońce jest na zewnątrz, albo róże kwitną, możesz uzyskać lepsze wyniki, ponieważ nasycą twoje łącze lepiej niż pojedyncze połączenie (na koszt wszystkich innych, którzy dzielą twój link, trochę jak co robi BitTorrent).

+0

W ten sposób zwykle działają akceleratory pobierania i menedżery. Nie nazwałabym tego brzydkim hackerem, nazwałbym to całkiem dobrym rozwiązaniem ;-) –

+0

@Chris OK, myślę, że ta część była naprawdę subiektywna. Naprawię to. – Gianni

+0

@Gianni Przypuszczam, że w perspektywie każdego innego, z którym powinieneś mieć pasję, jest zdecydowanie brzydki ... ;-) –

3

Użyj większego bufora wejściowego niż 1 KB. Im szybciej opróżnisz bufor, tym szybszy stos sieciowy może kontynuować pobieranie. To powinno pomóc:

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

To jest najprostszy sposób, aby uzyskać ładny wzrost prędkości pobierania; początkowo korzystałem z bufora 1kb, a następnie 8kb, ale potem wypróbowałem 50kb i zrobiłem znaczącą różnicę. – brack

+0

Niezwykle praktyczne rozwiązanie –

1

Mam ten sam problem, wymyśliłem ten kod. Był szybszy niż poprzednie wersje próbowałem. Podaję rozmiar bufora większy niż plik, który zamierzam załadować. Mam nadzieję, że to pomoże.

+0

Jest to zgodne z prawdą, ponieważ wymagany jest większy rozmiar bufora. Należy jednak unikać rozmiaru bufora większego niż rozmiar pliku dla plików większych niż kilka megabajtów ze względu na ograniczenia pamięci na urządzeniach mobilnych. – brack