零基础学习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 ...
随机推荐
- hdu 1856 More is better(并查集)
题意: Mr Wang wants some boys to help him with a project. Because the project is rather complex, the m ...
- Python3使用Print输出彩色字体
一.介绍 在一些开发程序中,有些输出消息需要突出显示,我们可以尝试着给他们换上更靓丽的颜色来突出显示. 二.实现过程 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. ...
- Android现有工程使用Compose
Android现有工程使用Compose 看了Compose的示例工程后,我们也想使用Compose.基于目前情况,在现有工程基础上添加Compose功能. 引入Compose 首先我们安装 Andr ...
- JMeter学习笔记--录制脚本(二)
第一步:在JMeter中添加线程组,命名为访问首页 第二步:在线程组下添加HTTP请求默认值 添加->配置元件->HTTP请求默认值,设置服务器IP和端口号(JMeter默认使用80端口号 ...
- 05 | 箭头函数 | es6
基本用法 参数列表)=> {函数体} var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函数不需要参数或 ...
- Vue.js教程 1.前端框架学习介绍
Vue.js教程 1.前端框架学习介绍 什么是Vue.js 为什么要学习流行框架 什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站, ...
- Springboot+vue前后端分离项目,poi导出excel提供用户下载的解决方案
因为我们做的是前后端分离项目 无法采用response.write直接将文件流写出 我们采用阿里云oss 进行保存 再返回的结果对象里面保存我们的文件地址 废话不多说,上代码 Springboot 第 ...
- 湖湘杯2020 writeup
这个平台中间卡的离谱,卡完过后交了flag分还掉了 Web 题目名字不重要 也算是非预期吧,赛后y1ng师傅也说了因为要多端口环境必须这样配,预期解很难 NewWebsite 后台弱口令admin a ...
- 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程
title: 在vs2017和vs2019下发布应用之Windows程序打包-附图标修改和默认安装路径定义全教程 date: 2020-04-25 sidebarDepth: 2 tags: wind ...
- Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
Django 自学笔记兼学习教程第7章第1节--基于类的视图(Class-based views)介绍 点击查看教程总目录 1 介绍 Class-based views (CBVs) are view ...