零基础学习java------23---------动态代理,ip,url案例
时间:2019-09-08
本文章向大家介绍零基础学习java------23---------动态代理,ip,url案例,主要包括零基础学习java------23---------动态代理,ip,url案例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 动态代理
2. ip,url案例
给定的access.log是电信运营商的用户上网数据,第一个字段是时间, 第二个字段是ip地址,第三个字段是访问的网站,其他字段可以忽略不计。
第一个字段是网段的起始IP地址,第二个字段是网段的结束IP地址,第三个字段是网段的起始IP地址对应的十进制,第四个字段是网段的结束IP地址对应的十进制,第五个字段代表洲,第六个代表国家,第七个代表省,第八个代表城市,第九个区域,第十个运营商。其他字段可以忽略不计。
要求:
通过计算access.log中的用户行为数据,统计出各个省份访问量(一次请求记作一次独立的访问量),并按照各个省份的访问量的从高到低进行排序
步骤分析:
1.读取ip规则数据(ip.txt),将每条数据封装在bean里面,并将所有的bean数据封装在list中
2.将ip装成长整型数据,以便判断特定ip是在哪个省份
3.使用二分查找IpBean,得出某个ip所在的IpBean,进而得到所属的省份
4.读取用户行为数据(access.log),以province为key,访问量为value存入map
具体代码:
IpBean
public class IpBean { private String startIp; private String endIp; private Long startLongIp; private Long endLongIp; private String state; private String country; private String province; private String city; private String area; private String isp; @Override public String toString() { return "IpBean [startIp=" + startIp + ", endIp=" + endIp + ", startLongIp=" + startLongIp + ", endLongIp=" + endLongIp + ", state=" + state + ", country=" + country + ", province=" + province + ", city=" + city + ", area=" + area + ", isp=" + isp + "]"; } public String getStartIp() { return startIp; } public void setStartIp(String startIp) { this.startIp = startIp; } public String getEndIp() { return endIp; } public void setEndIp(String endIp) { this.endIp = endIp; } public Long getStartLongIp() { return startLongIp; } public void setStartLongIp(Long startLongIp) { this.startLongIp = startLongIp; } public Long getEndLongIp() { return endLongIp; } public void setEndLongIp(Long endLongIp) { this.endLongIp = endLongIp; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getIsp() { return isp; } public void setIsp(String isp) { this.isp = isp; } public IpBean() { } public void set(String startIp, String endIp, Long startLongIp, Long endLongIp, String state, String country, String province, String city, String area, String isp) { this.startIp = startIp; this.endIp = endIp; this.startLongIp = startLongIp; this.endLongIp = endLongIp; this.state = state; this.country = country; this.province = province; this.city = city; this.area = area; this.isp = isp; } }
IpUtils
public class IpUtils { public static void main(String[] args) { // loadIpToList(); // binaryOfIp(3738648971L); } // 将相应的字段存入IpBean,并将IpBean存入list public static List<IpBean> loadIpToList() { List<IpBean> list = new ArrayList<>(); try ( BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\ip.txt")); ){ String line = null; while((line=br.readLine()) != null) { String[] split = line.split("\\|"); try { String startIp = split[0]; String endIp = split[1]; Long startLongIp; Long endLongIp; startLongIp = Long.parseLong(split[2]); endLongIp = Long.parseLong(split[3]); String state = split[4]; String country = split[5]; String province = split[6]; String city = split[7]; String area = split[8]; String isp = split[9]; IpBean ipBean = new IpBean(); ipBean.set(startIp, endIp, startLongIp, endLongIp, state, country, province, city, area, isp); list.add(ipBean); } catch (Exception e) { continue; } } } catch (Exception e) { e.printStackTrace(); } return list; } // 将字符串ip转成长整型ip public static long parseStrIpToLongIp(String ip){ long res = 0l; //192.168.133.34 if(ip == null){ return res ; }else{ String[] ips = ip.split("\\."); if(ips.length == 4){ for (int i = 0; i < ips.length; i++) { long l = Long.parseLong(ips[i]);// res |= l<<((3-i)<<3) ; } } } return res; } // 用来获取特定ip所属的ipBean public static IpBean binaryOfIp(Long ip, List<IpBean> list) { int start = 0; int end = list.size()-1; while(start <= end) { int middle = (start+end)/2; IpBean ipBean = list.get(middle); if(ip>=ipBean.getStartLongIp() && ip<=ipBean.getEndLongIp()) { return ipBean; } if(ip<ipBean.getStartLongIp()) { end = middle-1; } if(ip>ipBean.getEndLongIp()) { start = middle+1; } } return null; } }
测试类
public class IpTest { public static void main(String[] args) { Map<String, Integer> map = readData(); System.out.println(map); } public static Map<String, Integer> readData() { Map<String, Integer> map = new HashMap<>(); // 将数据的加载放入静态代码块 List<IpBean> list; { list = IpUtils.loadIpToList(); } // 获取以province为key,访问量为value的map try ( BufferedReader br = new BufferedReader(new FileReader("E:\\javafile\\access.log")); ){ String line = null; Integer sum = 1; while((line=br.readLine()) != null) { String[] split = line.split("\\|"); String date = split[0]; String ip = split[1]; String url = split[2]; Long ip1 = IpUtils.parseStrIpToLongIp(ip); IpBean bean = IpUtils.binaryOfIp(ip1, list); if(bean != null) { if(map.containsKey(bean.getProvince())) { sum+=1; map.put(bean.getProvince(), sum); } map.put(bean.getProvince(), sum); } } } catch (Exception e) { e.printStackTrace(); } return map; } }
原文地址:https://www.cnblogs.com/jj1106/p/11484780.html
- ListView数据动态更新
- ListView优化和列表首尾使用
- 自定义BaseAdapter
- 使用SimpleAdapter
- 自定义ArrayAdapter
- ListActivity和自定义列表项
- ListView列表数据源——Adapter
- 初识ListView
- 响应Android系统的事件
- ImageSwitcher和TextSwitcher
- Android BLE 基础框架全新改版
- Android 混淆从入门到精通
- 基础篇章:关于 React Native 之 ViewPagerAndroid 组件的讲解
- 基础篇章:关于 React Native 之 DrawerLayoutAndroid 组件的讲解
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- R语言做复杂金融产品的几何布朗运动的模拟
- R语言数据的收益率和可能的波动性交易
- 哈希算法的设计要点及应用场景
- R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
- Spring Boot中使用 Swagger2 自动构建API文档
- dotNET:怎样处理程序中的异常(理论篇)?
- xmake从入门到精通12:通过自定义脚本实现更灵活地配置
- ggplot2火山图展示RNAseq差异表达分析结果
- 如何根据class_code筛选转录本?
- JNI线程相关
- JNI函数加载
- CSS中的传统布局、多列布局、弹性伸缩布局及Emmet工具
- 数据分析可视化(四)|Pyecharts制作地图的几种方法评析
- tensorflow运行提示未编译使用SSE4.1,SSE4.2等问题的解决方法
- [手把手系列之二]实现多层神经网络