零基础学习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;
}
}
零基础学习java------23---------动态代理,ip,url案例的更多相关文章
- 音乐出身的妹纸,零基础学习JAVA靠谱么
问:表示音乐出身的妹纸一枚 某一天突然觉得身边认识的是一群程序员 突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- Spring学习(二)—— java的动态代理机制
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- salesforce零基础学习(一百一十三)Trigger中获取IP地址的过程
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.228.0.apexcode.meta/apexcode/apex_class_Auth ...
- 零基础学习openstack【完整中级篇】及openstack资源汇总
1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...
- 零基础学习hadoop到上手工作线路指导
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 零基础学习Hadoop
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值
注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...
- [爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP) 原文链接:https://www.cnblogs.com/blog5277/p/9334560.html 原 ...
- 深入理解Java反射+动态代理
答: 反射机制的定义: 是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为j ...
随机推荐
- u-boot 1.1.6 start.S 代码学习<转>
---转自 http://blog.csdn.net/rockhard/article/details/4166642 ------ /* 参考了别人的一些笔记,看完了启动代码. 本文档记录在看代码时 ...
- 关于linux7.x系列下的 systemd 的理解
历史上Linux的启动一直采用init进程,下面的命令用来启动服务. $ sudo /etc/init.d/apache2 start #或者 $ service apache2 start 这种方法 ...
- 【JavaScript】JS的坚实基础
前言 考虑到在后面的开发中,需要大量的使用js语言去进行开发,所以准备重新规整一下javascript的知识点,专门开了一个js的专栏,用来复习一下js语言.万事开头难,要是后面写的有问题的,欢迎 ...
- Mysql教程:(五)多表查询
多表查询 select name,student.class,student.number,maths,chinese,english from student,score where student ...
- MAC安装vue.js
一.下载node node下载地址:https://nodejs.org/en/download/ 下载后点击安装即可. node -v 检查安装是否成功 二.安装 淘宝镜像 (npm) npm in ...
- Linux usb 2. 协议分析
文章目录 0. 背景 1. USB 协议传输格式 1.1 Packet 1.1.1 Token Packet 1.1.2 Data Packet 1.1.3 Handshake Packet 1.1. ...
- Redis这15个“雷坑”,别问我咋知道的……
来源:https://dbaplus.cn/news-158-3836-1.html
- python3.7 pip
Is pip the same for 3.4+ No, it's not. A single pip installation serves a single Python distribution ...
- Maven 依赖调解源码解析(三):传递依赖,路径最近者优先
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第三篇,主要介绍依赖调解的第一条原则:传递依赖,路径最近者优先.本篇内容较多,也是开始源码分析的第一篇,请务必仔细阅读,否则后 ...
- 分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码
摘要:Forrester指出,中国企业数字化转型过程中,有58%的决策者正在采用低代码工具进行软件构建,另有16%的决策者计划采用低代码. 华为消息,知名研究与分析机构Forrester Resear ...