Výpočet rychlosti stahování – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpočet rychlosti stahování – Java – Fórum – Programujte.comVýpočet rychlosti stahování – Java – Fórum – Programujte.com

 

Mariz
~ Anonymní uživatel
2 příspěvky
19. 1. 2014   #1
-
0
-

Ahoj,

řašim výpočet rychlosti stahování souboru z URL ze streamu.

Našel jsem nějaký ukázky a způsoby, ale vždy to vypočítá z průměru což nechci, protože na začátku je rychlost třeba 10Mb/s a až potom se to srovnává, takže to není vůbec přesný.

Následně bych na to chtel napojit zbývající dobu do stáhnutí souboru, ale to udělat nemůžu, protože nemám přesný výpočet rychlosti, takže je to hooodně nepřesný :(

Nevíte někdo jak se dá vypočítat v Javě přesná rychlost stahování? Mám to normálně přes while (načítání do bufferu), takže znám všechny hodnoty, jak velikost souboru, kolik se přečetlo, kolik zbývá stáhnout...

Díky za nějaké rady nebo ukázky :-)

 Jinak takto to zatím mám (když odeberu zápis do souboru a ostatní zbytečnosti)

byte buffer[] = new byte[1024];
long downloaded = 0;
int read = 0;

long startNanoTime = System.nanoTime();

while ((read = in.read(buffer, 0, buffer.length)) != -1) {

    // zápis do souboru

    // vypocet rychlosti (bohuzel je to prumer a je to nepresny...)
    float speed = 1000000000f / 1024 * downloaded / (System.nanoTime() - startNanoTime + 1);

    downloaded += read;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Flowy0
Věrný člen
19. 1. 2014   #2
-
0
-

vazne to potrebujes na presnost nanotime? ... co si predstavujes pod "presnym vypoctom rychlosti"? rychlost je prejdena draha za dany cas ... cize presnejsie ako priemer to uz nebude resp presnejsie to uz nepotrebujes ... predpokladana doba dokoncenia bude asi dobre pocitat z priemernej rychlosti za poslednu chvilu (napr sekundu)

Nahlásit jako SPAM
IP: 95.102.43.–
https://github.com/Flowy
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #3
-
0
-

#2 Flowy
Mozes pocitat, okamzitu rychlost (dx(t)/dt, x(t) je mnozstvo dat prenesenych v danom od zaciatku stahovania, cize dx/dt = lim dt->0 (x(t-dt) - x(t))/dt, presnejsie je vsak lim dt->0 (x(t+dt) - x(t-dt))/2dt), len ci to v tomto pripade na nieco bude, tu ja asi naozaj pouzitelnejsia stredna hodnota od zaciatku stahovania.

Nahlásit jako SPAM
IP: 147.175.177.–
Mariz
~ Anonymní uživatel
2 příspěvky
19. 1. 2014   #4
-
0
-

#3 sleepy
popravdě přes determinanty a limity bych to nedokázal zapsat nebo implementovat do mého řešení, ale pokud by se ti to chtělo zkusit, byl bych nad míru vděčný :-)

Nahlásit jako SPAM
IP: 213.168.183.–
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #5
-
0
-

Nemyslim si ze okamzita rychlost stahovania, je presnejsia na odhad doby stiahnutia, ako stredna hodnota. Zober si pripad kedy x(t) sa bude velmi prudko menit, napr. x(t) = { sum( x(k*T), k=0, k < n) + 10*t, n%2 == 1; sum( x(k*T), k=0, k<n) +0.1*t, n%2==0} a T je nejaka perioda. V takomto pripade by si prisiel na to ze mas 2 rychlosti stahovania 0.1 a 10 + nieco okolo tychto hodnot (tam kde dx/dt to nie je definovana, ale numericky sa tomu nevyhnes) a nemohol by si odhadnut presnu hodnotu.

Nahlásit jako SPAM
IP: 147.175.177.–
Flowy0
Věrný člen
19. 1. 2014   #6
-
0
-

neviem si predstavit situaciu kedy bude median lepsie pouzitelny ako priemer ... tak isto sa mi zda ze okamzita rychlost (sama o sebe) je v tomto pripade zbytocna kedze data sa nestahuju uplne plynule ... vysledok by mal byt asi zavysli na aktualnej situacii ale zahrnat aj urcitu minulost (kedze rychlost je velmi premenliva a zobrazovanie info by nemalo v tom pripade zmysel) ... zahrnutie dlhej minulosti by znamenalo pomale zmeny ... preto si myslim ze najlepsie by bolo pocitat s priemerom okamzitych rychlosti za poslednu "chvilu" ... navyse by sa to lahko pisalo 

if (presiel_cas) { rychlost = (actual_data - last_data)/cas; last_data = actual_data; }

pre cas by som pouzil sekundu

Nahlásit jako SPAM
IP: 95.102.43.–
https://github.com/Flowy
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #7
-
0
-

Su to derivacie, nie determinanty (to su zasa urcovatele orientovaneho objemu). No da sa to, ale ako som pisal je to zbytocne. Ale tu je kod:  

byte buffer[] = new byte[1024];
int read = 0;

long lastTime = System.nanoTime();
long curentTime = 0;
double speed = 0.;
while ((read = in.read(buffer, 0, buffer.length)) != -1) {	
	currentTime = System.nanoTime();
	speed = read /(currentTime - lastTime) *1000000000/1024;
	// mohol by som dat lastTime = currentTime, ale tam by som to meral
	// aj s vypoctom rychlosti. Tu tiez meras aj ine veci.
	// Ale ak chces celkovu rychlost aj s operaciami, ta by mala dat
	// realnejsiu hodnotu. Tak daj lastTime = currentTime;
	lastTime = System.nanoTime();
	// read ti dava ciastkovy differencial dx, alebo jak sa to vola
	// ciastkovy diferencial dt vypocitas z rozdielov casov.
}
Nahlásit jako SPAM
IP: 147.175.177.–
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #8
-
0
-

#7 sleepy
Sorry, dve opravy diferencialy namiesto derivacie a v tom vypocte potrbujes prve cislo castnut na double.

Nahlásit jako SPAM
IP: 147.175.177.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Podobná vlákna

Rychlosti NALÉHAVÉ — založil Cherokee007

Pád rychlosti na AP/Switchi — založil Dominik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý