URL区域访问量案例

编程入门 行业动态 更新时间:2024-10-28 05:13:10

URL区域<a href=https://www.elefans.com/category/jswz/34/1758122.html style=访问量案例"/>

URL区域访问量案例

给定的access.log是电信运营商的用户上网数据,
第一个字段是时间, 第二个字段是ip地址,第三个字段是访问的网站,
其他字段可以忽略不计。

ip.txt是ip地址和归属地的规则数据,里面的数据是根据ip地址的十进制从低到高排序。

要求:
通过计算access.log中的用户行为数据,统计出各个省份访问量(一次请求记作一次独立的访问量),并按照各个省份的访问量的从高到低进行排序

分析 :
- 根据需求,要确定access.log中用户ip地址所在的省份,
- 要确定就要查找,ip.txt中数据保存在list中,第一IpBean存储数据,list方便使用索引查找
- ip.txt中的ip是[16779264,16781311],这是长整型的一个范围,要对access.log里面的ip(192.168.12.14)进行长整型转化,用二分查找找到ip对应的IpBean
- 将找到的省份存在map中,value是访问的次数

main方法:

// key -->省份 value -->ip访问的次数Map<String, Integer> pMap = new HashMap<>();BufferedReader br = new BufferedReader(new FileReader("d:/data/access.log"));String line;while ((line = br.readLine()) != null) {try {// 20090121000132095572000|125.213.100.123|show.51.com|/.....String[] split = line.split("\\|");// 对ip地址分割String[] ip = split[1].split("\\.");// 转长整型ip地址long longIp = (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8)+ (Long.parseLong(ip[3]));//通过二分查找找到对应ip地址所在的beanIpBean bean = MyUtils.binarySearchByLongIp(longIp);String province = bean.getProvince();Integer count = pMap.getOrDefault(province, 0);count++;pMap.put(province, count);} catch (Exception e) {//异常出现就结束本次循环continue;}}//对pMap按value降序排序,输出到控制台/*** pMap.entrySet().stream->EntrySet<String,Integer>的流* sorted按value降序* foreach 遍历打印*/pMap.entrySet().stream().sorted((o1,o2)->o2.getValue()-o1.getValue()).forEach(System.out::println);br.close();

读IpBean:

public static List<IpBean> getIpInfo() throws Exception {//存IpBeanList<IpBean> list = new ArrayList<>();BufferedReader br = new BufferedReader(new FileReader("d:/data/ip.txt"));String line;while((line = br.readLine())!=null) {// | 分割数据String[] split = line.split("\\|");String startIp=split[0];String endIp=split[1];long startLongIp;long endLongIp;try {//如果split[2]/split[3]的数据不是数字的就会报错,跳过这条数据startLongIp=Long.parseLong(split[2]);endLongIp=Long.parseLong(split[3]);} catch (Exception e) {continue;}String zhou=split[4];String contry=split[5];String province=split[6];String city=split[7];String area=split[8];String isp=split[9];IpBean bean = new IpBean(startIp, endIp, startLongIp, endLongIp, zhou, contry, province, city, area, isp);list.add(bean);}br.close();return list;}

二分查找:

public static IpBean binarySearchByLongIp(long key) throws Exception {//声明两个指针,一个指向开始,一个指向结束int start = 0;int end = info.size() - 1;while (start <= end) {// 得到中间的索引 和 对应的Beanint middleIndex = (start + end) >>> 1;IpBean midBean = info.get(middleIndex);// 得到ip的长整型long startLongIp = midBean.getStartLongIp();long endLongIp = midBean.getEndLongIp();//如果key在ip之间,返回找到的Beanif (key >= startLongIp && key <= endLongIp) {return midBean;//key小于startLongIp的时候,让end指向middleIndex-1;} else if (key < startLongIp) {end = middleIndex - 1;//key大于endLongIP的时候,让start指向middleIndex+1;} else {start = middleIndex + 1;}}//如果没有找到,返回nullreturn null;}

更多推荐

URL区域访问量案例

本文发布于:2023-07-28 21:05:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1318583.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:访问量   区域   案例   URL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!