📄 postprocess.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 + -