⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postprocess.java

📁 p2p仿真
💻 JAVA
字号:
/*
 * @(#)PostProcess.java	ver 1.2  6/20/2005
 *
 * Copyright 2005 Weishuai Yang (wyang@cs.binghamton.edu). 
 * All rights reserved.
 * 
 */
package gps.toolbox;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.StringTokenizer;


/**
 * post processes trace file after simulation, it can do grep and calculates average downloading time
 *
 * @author  Weishuai Yang
 * @version 1.2,  6/20/2005
 */
 
public class PostProcess {

	/**
	 * dummy constructor
	 */
	public PostProcess() {
		
	}	
	
	/**
	 * grep lines with a specific keyword from a file 
	 * @param in input file
	 * @param key keyword
	 * @param out output file
	 */
	public static void grep(String in, String key, String out){
		
	    try
	    {
			String buf=null;
			BufferedReader input= new BufferedReader(new FileReader(in));
			BufferedWriter output= new BufferedWriter(new FileWriter(out));
				
			while((buf=input.readLine())!=null){
				if(buf.contains(key)) {
					output.write(buf, 0, buf.length());
					output.newLine();
				}

			}
			input.close();
			output.close();

	    }

	    catch (Exception e){
	    	e.printStackTrace();
	    }

		
	}
	
	
	/**
	 * inner class to keep recording of start time for each downloading
	 */
	static final class Record{
		public double start;
		public String peer;
		public String key;
		public double end;
		public double elasp;
		public Record(double s, String p, String k){
			start=s;
			peer=p;
			key=k;
		}
	}
	
	/**
	 * calculate average downloading time
	 * @param in input trace file
	 */
	public static void avg(String in){
		LinkedList l=new LinkedList();
	    try
	    {
			String buf=null;
			BufferedReader input= new BufferedReader(new FileReader(in));
			StringTokenizer tk;
				
			int count=0;
				
			while((buf=input.readLine())!=null){
				if(buf.contains("Starts")) {
                   tk = new StringTokenizer(buf);
                   String r=tk.nextToken();
                   double time=Double.parseDouble(r.substring(0, r.length()-1));
                   String p=tk.nextToken();
                   tk.nextToken();
                   tk.nextToken();
                   tk.nextToken();
                   String k=tk.nextToken();
                   l.add(new Record(time, p, k));
				}
				else if(buf.contains("Completed")){
                   tk = new StringTokenizer(buf);
                   String r=tk.nextToken();
                   double time=Double.parseDouble(r.substring(0, r.length()-1));
                   String p=tk.nextToken();
                   tk.nextToken();
                   tk.nextToken();
                   tk.nextToken();
                   String k=tk.nextToken();
                   
                   
                   for(int i=0;i<l.size();i++){
                   		Record rec=(Record)l.get(i);
                   		if(p.equals(rec.peer)&&k.equals(rec.key)){
                   			rec.end=time;
                   			rec.elasp=rec.end-rec.start;
                   			break;
                   		}
                   }
				}
			}
			
			double sum=0;
			for(int i=0;i<l.size();i++){
               Record rec=(Record)l.get(i);
               sum+=rec.elasp;
            }
            System.out.println("Total "+l.size()+" downloads, average download time "+(sum/l.size())+" sec");
			
	    }

	    catch (Exception e){
	    	e.printStackTrace();
	    }

		
	}
	
	
	/**
	 * main entrance
	 * @param args command line parameters
	 */
	public static void main(String[] args) {

		//PostProcess.grep(args[0], args[1], args[2]);
	
		PostProcess.avg(args[0]);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -