201230:PropUtils的使用-List进行排

2020-12-30  本文已影响0人  弹钢琴的崽崽

一. PropUtils的使用

Java读取和修改properties文件

方法说明:

  1. Properties getProperties(String filepath):根据路径读取属性文件,返回Properties类;
  2. void saveProperties(Properties prop,String filepath):保存属性到指定路径(如果文件不存在,请先创建File);
  3. String getConfigValue(String key):获取指定Key的属性;
  4. void setConfigValue(String key,String value):设置指定Key的属性值。
package com.tompai.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Properties;

/**
* @desc: demo
* @name: PropUtils.java
* @author: tompai
* @email:liinux@qq.com
* @createTime: 2020年1月11日 下午10:41:06
* @history:
* @version: v1.0
*/

public class PropUtils {
    public static String LOCATION;
    public static final String CONFIG = "application.properties";

    static{
        try {
            String temp = URLDecoder.decode(PropUtils.class.getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8");
            LOCATION = temp.substring(1, temp.lastIndexOf('/'));
        } catch (UnsupportedEncodingException e) {
            LOCATION = "";
        }

    }
    /**
     * @param args
     * @throws Exception 
     */
    public static Properties getProperties(String filepath) throws Exception {
        Properties prop = new Properties();
        FileInputStream fis = new FileInputStream(LOCATION+"/"+filepath);
        prop.load(fis);
        return prop;
    }

    public static void saveProperties(Properties prop,String filepath) throws Exception {
        FileOutputStream fos = new FileOutputStream(LOCATION+"/"+filepath);
        prop.store(fos, "@author tompai");
        fos.close();
    }

    public static String getConfigValue(String key) {
        try {
            Properties properties = getProperties(CONFIG);
            if(properties.get(key)!=null){
                return properties.get(key).toString();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return "";
    }

    public static void setConfigValue(String key,String value){
        try {
            Properties properties = getProperties(CONFIG);
            properties.setProperty(key, value);
            saveProperties(properties, CONFIG);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

二. List集合里面是map类型进行排序

Collections.sort(mapList,new Comparator<>(){...})

/**1.根据用户浏览量进行排序
//   例:
List<Map<String,Object>> mapList= new ArrayList<>();
注:mapList里面存在 browserNum属性
*/ 
//排序 倒序
    if (mapList != null && mapList .size() > 1) {
            Collections.sort(mapList , new Comparator<Map<String, Object>>() {
                @Override
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    Integer o1Value = Integer.valueOf(o1.get("browserNum").toString());
                    Integer o2Value = Integer.valueOf(o2.get("browserNum").toString());
                    return o1Value.compareTo(o2Value);
                }
            });
        }
            return mapList;
//想要顺序的话可以调换一下返回值

三. RestTemplate详解

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

1. 简述RestTemplate

是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHttp。

RestTemplate能大幅简化了提交表单数据的难度,并且附带了自动转换JSON数据的功能,但只有理解了HttpEntity的组成结构(header与body),且理解了与uriVariables之间的差异,才能真正掌握其用法。这一点在Post请求更加突出,下面会介绍到。

该类的入口主要是根据HTTP的六个方法制定:

此外,exchange和excute可以通用上述方法。

在内部,RestTemplate默认使用HttpMessageConverter实例将HTTP消息转换成POJO或者从POJO转换成HTTP消息。默认情况下会注册主mime类型的转换器,但也可以通过setMessageConverters注册其他的转换器。

RestTemplate详情看这篇文章

四. 内网、外网、宽带、带宽、流量、网速之间的区别与联系

1. 内网ip和外网ip区别

如图,假设我们的计算机是设备一,想要访问百度。

如果使用校园网,首先需要先通过校园网的路由器把我们的内网ip转为校园网的外网ip。

然后通过这个外网ip先连接上湖南电信的网关,最后在连接上百度的网关。

百度把你请求的信息回传到你的校园网网关校园网网关再把信息传给你(整个网络呈网状结构,它会自动找到一条通往百度的路径——基于深度优先搜索或者广度优先搜索)。

这个过程就跟淘宝购物差不多。

假设在学校里订购了一本书,淘宝那边接收到你的订单准备好物品就开始给你发货了。

他发现你的收货地址在湖南,于是它可能从杭州出发,先去了福建的中转站,然后再到江西的中转站,突然发现江西到湖南的中转站不通,于是它只能再绕到广东的中转站,最后再到湖南中转站。``这些中转站就相当于公网上的各个网关。

到了湖南中转站,快递小哥再把包裹送到你的校门(这就是最后一级网关)。

这时快递小哥就走了,校门处的管理人员在根据的你的宿舍信息把包裹拿给你。(局域网内部的信息交流由校园网这个网关来处理)

这对刚接触互联网的人来说有些难以理解内网ip和公网ip的区别,那我们在举一个例子

我们把酒店的201房比作内网ip,那么凡是酒店都可能有201房,假如你饿了会对服务员说:“我在201房间,麻烦送些吃的过来“。而假如你要点外卖的话你对店家仅说送来201房间(内网ip),外面的人是不可能知道的,这时你就要对店家说某某市某某区某某酒店(公网ip)再加上201房 店家才能找到你。

-运营商所分配公网ip地址(某某市某某区某某酒店)也就是所住的酒店,而201房(内网ip) 则是酒店管家(路由器)所分配的。所以一个酒店可以有很多的房间(内网ip)但是当外面的朋友问你住哪里,你肯定不会说你住在201房间(内网ip)而会说你住在某某市某某区某某酒店(公网ip)。

这是内网ip和公网ip的本质区别。一个对内,一个对外

注意点

1、公网ip具有世界范围的唯一性,而内网ip只在局域网内部具有唯一性

2、一个局域网里所有电脑的内网IP互不相同的,共用一个外网IP

就像前面酒店的例子一样:你所在学校的校名在整个世界上只有一个,但是你学校里面的A栋大楼3层3号教室只有在你的校园内部才具有唯一性。别的学校也有A栋大楼3层3号教室你只能跟快递小哥说请帮我把包裹送到xx大学,而不能说请帮我把包裹送到A栋大楼3层3号教室。

3、在局域网中,每台电脑都可以自己分配自己的IP,但是这个IP只在局域网中有效。而如果你将电脑连接到互联网,你的网络提供商的服务器会为你分配一个IP地址,这个IP地址才是你在外网的IP。两个IP同时存在,一个对内,一个对外。

4、互联网上的IP(即外网IP)地址统一由一个叫“IANA(互联网网络号分配机构)”的组织来管理。由于分配不合理以及IPv4协议本身存在的局限,现在互联网的IP地址资源越来越紧张。IANA将A、B、C类IP地址的一部分保留下来,留作局域网使用。具体如下

IP地址空间:

a类网
10.0.0.0 ~ 10.255.255.255

b类网
172.16.0.0 ~ 172.31.255.255

c类网
192.168.0. 0~ 192.168.255.255

也就是说,如果你查到的ip地址在以上A、B、C类IP地址的范围内,它一定就是局域网的ip地址,否则就是公网的地址。

5、实际生活中不仅有一级NET技术,还有二级NET技术。也就是可能你的校园网关也只是个局域网。通过多级转换可以得到更多的地址。

1.经验法

1、一般电信ADSL带宽在未升级大带宽前是(动态)公网IP。如果花费很少的钱给你升级为100M光纤上网,99.99%是内网IP,那0.01%是我还没有发现过案例。

2、代理网络运营商99.99%都是内网IP,如长城带宽、聚友E家等。

3、光纤上网的99.99%都是内网IP。

2.直观法

以下IP段的地址都是内网IP地址

10.0.0.0 到 10.255.255.255
172.16.0.0 到172.31.255.255
192.168.0.0 到192.168.255.255

详细区别情况该文章

上一篇下一篇

猜你喜欢

热点阅读