package view;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @author cyt
* @create 2020-05-20 13:55
*/
public class Test {
public static void main(String[] args) throws IOException, InterruptedException {
// 调用 url
ArrayList<Integer> list = getDate();
for (Integer integer : list) {
System.out.println(integer);
}
// 分析数据
histogram(list);
}
static ArrayList<Integer> getDate() throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("cmd.exe /c ping -n 6 www.baidu.com");
int status = process.waitFor();
System.out.println(status);
Charset gbk = Charset.forName("GBK");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("GBK")));
String line = br.readLine();
ArrayList<String> list = new ArrayList<>();
ArrayList<String> panelString = new ArrayList<>();
while (line != null) {
panelString.add(line);
String[] s = line.split(" ");
for (String s1 : s) {
if (s1.contains("ms")) {
list.add(s1);
}
}
line = br.readLine();
}
for (String s : panelString) {
System.out.println(s);
}
/* 时间=20ms
时间=23ms
时间=20ms
*/
List<String> subList = list.subList(0, list.size() - 3);
ArrayList<Integer> ans = new ArrayList<>();
for (String s : subList) {
String[] split = s.split("=");
ans.add(Integer.parseInt(split[1].replaceAll("ms", "")));
}
return ans;
}
static void histogram(ArrayList<Integer> list) {
Integer max = Collections.max(list);
Integer min = Collections.min(list);
int size = list.size();
int[] ans = new int[100];
for (Integer integer : list) {
ans[integer]++;
}
Arrays.sort(ans);
System.out.println("最小值:" + min);
System.out.println("最大值:" + max);
int bins = ans[99];
System.out.println("bins :" + ans[99]);
int binSize = (max - min) / ans[99];
System.out.println("binSize :" + (max - min) / ans[99]);
System.out.println("histogram");
for (int i = 0; i < bins; i++) {
if (i == bins - 1) {
int m = min;
System.out.println(m + "<=RTT<=" + max + " " + getNum2(m, max, list));
System.out.println();
} else {
int a = min;
int b = ++min;
System.out.print(a + "<=RTT<" + b + " " + getNum1(a, b, list));
System.out.println();
}
}
}
static String getNum1(int min, int max, ArrayList<Integer> list) {
int num = 0;
for (Integer integer : list) {
if (integer >= min && integer < max) {
num++;
}
}
String s = "";
for (int i = 0; i < num; i++) {
s += "X ";
}
return s;
}
static String getNum2(int min, int max, ArrayList<Integer> list) {
int num = 0;
for (Integer integer : list) {
if (integer >= min && integer <= max) {
num++;
}
}
String s = "";
for (int i = 0; i < num; i++) {
s += "X ";
}
return s;
}
}
效果
正在 Ping www.a.shifen.com [39.156.66.18] 具有 32 字节的数据:
来自 39.156.66.18 的回复: 字节=32 时间=22ms TTL=53
来自 39.156.66.18 的回复: 字节=32 时间=22ms TTL=53
来自 39.156.66.18 的回复: 字节=32 时间=26ms TTL=53
来自 39.156.66.18 的回复: 字节=32 时间=21ms TTL=53
来自 39.156.66.18 的回复: 字节=32 时间=32ms TTL=53
来自 39.156.66.18 的回复: 字节=32 时间=30ms TTL=53
39.156.66.18 的 Ping 统计信息:
数据包: 已发送 = 6,已接收 = 6,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 21ms,最长 = 32ms,平均 = 25ms
22
22
26
21
32
30
最小值:21
最大值:32
bins :2
binSize :5
histogram
21<=RTT<22 X
22<=RTT<=32 X X X X X