ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
``` /** * @author 张跃帅 * @Description: 获取网络速度-工具 * @date 2020/08/12 */ @Slf4j public class NetworkUtil { /** * 网速测速时间2s */ private static final int SLEEP_SECONDS = 2; /** * 获取网络上下行速率 * 格式{"UP": "123KB/S, "DOWN": "345KB/S"} */ public static Dict getNetworkUpRate() { // 创建map Dict dictMap = Dict.create(); // 变量-过程 Process pro = null; // 获取运行时 Runtime r = Runtime.getRuntime(); // 变量-缓冲区读取 BufferedReader input = null; try { // 获取当前的操作系统 boolean isWindows = SystemUtil.getOsInfo().isWindows(); // windows命令 String command = isWindows ? "netstat -e" : "ifconfig"; // 执行命令 pro = r.exec(command); // 创建缓冲读卡器 input = new BufferedReader(new InputStreamReader(pro.getInputStream())); // 联机读取 long[] result1 = readInLine(input, isWindows); // 等待 Thread.sleep(SLEEP_SECONDS * 1000); // 销毁 pro.destroy(); // 关闭 input.close(); // 执行命令 pro = r.exec(command); // 创建缓冲读卡器 input = new BufferedReader(new InputStreamReader(pro.getInputStream())); // 联机读取 long[] result2 = readInLine(input, isWindows); // 可读文件大小 String upSpeed = FileUtil.readableFileSize(Convert.toLong(NumberUtil.div(NumberUtil.sub(result2[0], result1[0]), SLEEP_SECONDS))); String downSpeed = FileUtil.readableFileSize(Convert.toLong(NumberUtil.div(NumberUtil.sub(result2[1], result1[1]), SLEEP_SECONDS))); // 添加 dictMap.put("up", upSpeed + (upSpeed.endsWith("B") ? "/S" : "B/S")); dictMap.put("down", downSpeed + (downSpeed.endsWith("B") ? "/S" : "B/S")); } catch (Exception e) { log.info(">>> 获取网络测速失败", e.getMessage()); } finally { // 判断 if (input != null) { try { // 关闭 input.close(); } catch (IOException e) { log.info(">>> 获取网络测速失败", e.getMessage()); } } // 使用Optional是用来设置默认值的,杜绝null的出现 Optional.ofNullable(pro).ifPresent(Process::destroy); } // 返回 return dictMap; } /** * 格式数字 */ @SuppressWarnings("all") private static String formatNumber(double f) { return new Formatter().format("%.2f", f).toString(); } /** * 联机读取 */ private static long[] readInLine(BufferedReader input, boolean isWindows) { // 变量数组 long[] arr = new long[2]; // 变量-字符串标记器 StringTokenizer tokenStat; try { // 判断-操作系统 if (isWindows) { // 获取windows环境下的网口上下行速率 input.readLine(); input.readLine(); input.readLine(); input.readLine(); // 创建-字符串标记器 tokenStat = new StringTokenizer(input.readLine()); // 下一个令牌 tokenStat.nextToken(); // 参数转换 arr[0] = Long.parseLong(tokenStat.nextToken()); arr[1] = Long.parseLong(tokenStat.nextToken()); } else { // 获取linux环境下的网口上下行速率 long rx = 0, tx = 0; // 变量 String line = null; // RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0 // TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0 // 遍历 while ((line = input.readLine()) != null) { // 判断 if (line.contains("RX packets")) { // 拼接 rx += Long.parseLong(line.substring(line.indexOf("RX packets") + 11, line.indexOf(" ", line.indexOf("RX packets") + 11))); } else if (line.contains("TX packets")) { // 拼接 tx += Long.parseLong(line.substring(line.indexOf("TX packets") + 11, line.indexOf(" ", line.indexOf("TX packets") + 11))); } } // 赋值 arr[0] = rx; arr[1] = tx; } } catch (Exception e) { log.info(">>> 获取网络测速失败", e.getMessage()); } // 返回 return arr; } }