• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - zagniezdzone petle - analiza bufora

Object Storage Arubacloud
0 głosów
215 wizyt
pytanie zadane 9 maja 2018 w Java przez acero_m Początkujący (390 p.)

Cześć

Robię projekt polegający na analizie ruchu sieciowego pcap. Stworzyłem klasy które odczytują dane(czas oraz rozmiar pakietu) z pliku wejściowego oraz wyjściowego w formacie .pcap i to działa poprawnie. Problem mam z logarytmem który sprawdza stan bufora (ile razy bufor był pusty, ile razy wyjęcie danych się nie powiodło, czas przez jaki bufor był pusty oraz rozmiar końcowy bufora). Docelowo metoda analysis_buffer ma dodawać lub odejmować input_size/output_size w zależności od input_time/output_time, dane te sprawdzam w pętlach, pierwsza puszczona jest po wielkości tablicy z danymi z pliku wejściowego, druga zagnieżdżona ustawiona jest wielkość tablicy z pakietami wyjściowymi. Program działa jednak output jest niepoprawny.

"Final buffer size: 1227700210.
Buffer was empty 1 times.
Failed attempt to output data from the buffer: 0 times.
Total time for which the buffer was empty: 0.0 seconds."

Wrzucam kod z dwóch metod, więcej chyba nie jest potrzebne.


int buffer_size =0;            //initial size the buffer
int failed_attempt =0;         //count unsuccessful attempt to output packet from the buffer
double time_empty = 0;    //time for which buffer was empty
int count_empty =0;	 //count for which buffer was empty



public void analysis_buffer(PcapPacketArrayList packetArrayList, PcapPacketArrayList packetArrayList2, double[] input_time, double[] output_time, int[] input_size, int[] output_size) {
		
		
		for (int i = 0; i < packetArrayList.size(); i++) {
			
			for (int j = 0; j < packetArrayList2.size(); j++) {
			
				// if output time is greater than input time, add input size to main buffer size
				if (input_time[i] < output_time[j]) {
					buffer_size = buffer_size + input_size[i];				
					}
				
				//  if input time is greater than output time, we have 3 options
				// 	1. buffer size is greater than output size packet and output is subtracted from buffer size
				// 	2. buffer size is smaller than output packet - buffer size is automatically equal 0 
				//  3. buffer size is equal 0, I'm increasing unsuccessful attempt to get out of the buffer and saves time when buffer was empty 
				
				else if (input_time[i] > output_time[j]) {
					
						if(output_size[j] < buffer_size) {										
							buffer_size = buffer_size - output_size[j];
							}
					
						if(output_size[j] > buffer_size) {
							buffer_size = 0;
							count_empty++;
							}
						
						if(buffer_size == 0) {
							failed_attempt++;
							time_empty = time_empty + (output_time[j+1]-output_time[j]);
							}
						}				

				// if input time is equal output time, add and subtract packets from buffer size, or buffer size is automatically equal 0
				else if (input_time[i] == output_time[j]) {
					
					if(output_size[j] < buffer_size) {
						buffer_size = buffer_size + input_size[i] - output_size[j];
						}
					
					if(output_size[j] > (buffer_size + input_size[i])){
						buffer_size = 0;
						count_empty++;
						}
					}				
				}
			}
		}
	

	public void check_buffer() {
		
		System.out.println("Initial buffer size was 0");
		System.out.println("Final buffer size: " + buffer_size +".");
		System.out.println("Buffer was empty " + count_empty +" times.");
		System.out.println("Failed attempt to output data from the buffer: " + failed_attempt +" times.");
		System.out.println("Total time for which the buffer was empty: " + time_empty + " seconds.");
		}

}

I teraz pytanie, w dobry sposób zabrałem się za porównywanie dwóch plików? w czym jest problem, że działania nie wykonują się poprawnie i po przejściu pętli zmienne maja dalej wartość zerowa? Każda wskazówka jest na wagę złota!

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 501 wizyt
pytanie zadane 29 marca 2022 w C i C++ przez trafo13 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 973 wizyt
pytanie zadane 22 stycznia 2021 w C i C++ przez Karson Obywatel (1,000 p.)
0 głosów
3 odpowiedzi 1,004 wizyt
pytanie zadane 2 maja 2020 w Python przez lenzo1 Początkujący (360 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...