零基础学习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 ...
随机推荐
- js 在浏览器中的event loop事件队列
目录 前言 认识一个栈两个队列 执行过程 异步任务怎么分配 简单例子 难一点的例子 前言 以下内容是js在浏览器中的事件队列执行,与在nodejs中有所区别,请注意. 都说js是单线程的,不过它本身其 ...
- Mac搭建以太坊私有链
记录过程与问题 一.安装 以go版本的ethereum进行安装 brew tap ethereum/ethereum brew install ethereum # 如果希望基于ethereum的de ...
- Nginx高级特性实操
导读 nginx从入门到精通,点我直达 下载nginx与安装 点我直达 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl opens ...
- 设计模式学习-使用go实现建造者模式
建造者模式 定义 适用范围 与工厂模式的区别 优点 缺点 参考 建造者模式 定义 Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式. 建造者模式(Builder Patt ...
- 【java+selenium3】自动化cookie操作+图形验证码处理 (十五)
一.cookie操作 1.获取浏览器所有的cookie import java.util.Set; import org.openqa.selenium.Cookie; //获取浏览器所有的cooki ...
- MySQL高级篇 | 分析sql性能
在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越 ...
- Java日期API
JDK8之前日期时间API java.util.Date类 表示特定的瞬间,精确到毫秒 构造器: Date():使用无参构造器创建的对象可以获取本地当前时间. Date(long date) 常用方法 ...
- D3.js V5 教程
D3.js V5 教程 1.在项目中使用D3.js 2. 选择元素和设置(获取)属性 3. 绑定数据 4. 理解Update.Enter.Exit 与 添加.删除元素 未完待续..........
- WebSocket实现简易的FTP客户端
WebScoket的简单应用,实现一个简易的FTP,即文件上传下载,可以查看上传人,下载次数,打开多个Web可以多人上传. 说在前面的话 文件传输协议(File Transfer Protocol,F ...
- 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程
title: 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程 date: 2020-04-25 sidebarDepth: 2 tags: wind ...