一. PropUtils的使用
Java读取和修改properties文件
方法说明:
- Properties getProperties(String filepath):根据路径读取属性文件,返回Properties类;
- void saveProperties(Properties prop,String filepath):保存属性到指定路径(如果文件不存在,请先创建File);
- String getConfigValue(String key):获取指定Key的属性;
- 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
RestTemplate能大幅简化了提交表单数据的难度,并且附带了自动转换JSON数据的功能,但只有理解了HttpEntity的组成结构(header与body),且理解了与uriVariables之间的差异,才能真正掌握其用法。这一点在Post请求更加突出,下面会介绍到。
该类的入口主要是根据HTTP的六个方法制定:
此外,exchange和excute可以通用上述方法。
在内部,RestTemplate默认使用HttpMessageConverter实例将HTTP消息转换成POJO或者从POJO转换成HTTP消息。默认情况下会注册主mime类型的转换器,但也可以通过setMessageConverters注册其他的转换器。
四. 内网、外网、宽带、带宽、流量、网速之间的区别与联系
1. 内网ip和外网ip区别
如图,假设我们的计算机是设备一,想要访问百度。
这个过程就跟淘宝购物差不多。
这对刚接触互联网的人来说有些难以理解内网ip和公网ip的区别,那我们在举一个例子
注意点
1、公网ip具有世界范围的唯一性
,而内网ip只在局域网内部具有唯一性
2、一个局域网里所有电脑的内网IP是互不相同的,
但共用一个外网IP
。
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