当前位置: 首页 > news >正文

wordpress公众账号同步廊坊百度关键词优化

wordpress公众账号同步,廊坊百度关键词优化,工控做网站,时时彩网站源码怎么做文章目录 序列化是什么?常见的序列化协议使用序列化反序列化序列化List反序列化List 查看源码,分析不足进行改善 序列化是什么? 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象&#xff0c…

文章目录

  • 序列化是什么?
  • 常见的序列化协议
  • 使用
    • 序列化
    • 反序列化
    • 序列化List
    • 反序列化List
  • 查看源码,分析不足
  • 进行改善

序列化是什么?

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。

  • 序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式
  • 反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程

对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class)

下面是序列化和反序列化常见应用场景:

  • 对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化;
  • 将对象存储到文件之前需要进行序列化,将对象从文件中读取出来需要进行反序列化;
  • 将对象存储到数据库(如 Redis)之前需要用到序列化,将对象从缓存数据库中读取出来需要反序列化;
  • 将对象存储到内存之前需要进行序列化,从内存中读取出来之后需要进行反序列化。

序列化的主要目的是通过网络传输对象或者说是将对象存储到文件系统、数据库、内存中。

常见的序列化协议

JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且存在安全问题。比较常用的序列化协议有 fastjson、jackson、protobuf(PB)、、、
在我的项目中,使用jackson

使用

我们所有的jackson序列化以及反序列化都是基于ObjecMapper来操作的
我们先定义一个错误的异常类。后续所有的序列化反序列化操作都是针对这个错误类实例出的对象而完成的。

@Data
public class CommonResult<T> implements Serializable {private Integer code;private T data;private String msg;public static <T> CommonResult<T> success(T data) {CommonResult<T> result = new CommonResult<T>();result.code = GlobalErrorCodeConstants.SUCCESS.getCode();result.data = data;result.msg = "";return result;}public static <T> CommonResult<T> error(Integer code, String msg) {Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code),"code 不是错误的异常");CommonResult<T> result = new CommonResult<T>();result.code = code;result.msg = msg;return result;}public static <T> CommonResult<T> error(ErrorCode errorCode){return error(errorCode.getCode(), errorCode.getMsg());}
}

序列化

 void TestJackson(){ObjectMapper objectMapper = new ObjectMapper();CommonResult<String> commonResult1 =  CommonResult.error(500,"系统错误!");//序列化String str;try {str = objectMapper.writeValueAsString(commonResult1);System.out.println(str);} catch (JsonProcessingException e) {throw new RuntimeException(e);}}

反序列化

 //反序列化try {CommonResult<String> commonResult = objectMapper.readValue(str, CommonResult.class);System.out.println(commonResult.getCode()+commonResult.getMsg());} catch (JsonProcessingException e) {throw new RuntimeException(e);}

序列化List

//序列化listList<CommonResult<String>> list = Arrays.asList(CommonResult.success("success111"),CommonResult.success("success222"));try {str = objectMapper.writeValueAsString(list);System.out.println(str);} catch (JsonProcessingException e) {throw new RuntimeException(e);}

反序列化List

这里反序列化有一个注意事项
在这里插入图片描述
objecMapper.readValue里面的第二个参数 valueType不能直接放里不能直接放 list<CommonResult<String>>.class,要使用 JavaType的方法 将list 和 list里面的元素 整合成一个类型

 //反序列化listJavaType listType = objectMapper.getTypeFactory().constructParametricType(List.class,CommonResult.class);try {list = objectMapper.readValue(str,listType);System.out.println(list);} catch (JsonProcessingException e) {throw new RuntimeException(e);}

运行结果如下
在这里插入图片描述

查看源码,分析不足

在我上述给出的代码中,我们可以看到,每一次进行序列化反序列化操作时,都需要进行try-catch操作,那么我们观察springboot的源码,可以来借鉴改善我们的代码

点开SpringBoot源码,找到反序列化List的方法。

  public List<Object> parseList(String json) {return (List)this.tryParse(() -> {return (List)this.getObjectMapper().readValue(json, LIST_TYPE);}, Exception.class);}

我们观察到,里面调用到了tryParse这个方法,我们点开这个方法

 protected final <T> T tryParse(Callable<T> parser, Class<? extends Exception> check) {try {return parser.call();} catch (Exception var4) {Exception ex = var4;if (check.isAssignableFrom(ex.getClass())) {throw new JsonParseException(ex);} else {ReflectionUtils.rethrowRuntimeException(ex);throw new IllegalStateException(ex);}}}

我们可以看到parseList中通过lambda表达式的方式,将异常全部在tryParse中进行try-catch。

解析tryParse

  1. 参数列表
    Callable<T> parser, Class<? extends Exception> check
    第一个参数是一个Callable,第二个参数是一个Exception的class
  2. 返回值
    泛型T
  3. parser.call()
    相当于是将parseList中的lambda表达式进行调用。(List)this.tryParse(() -> { return (List)this.getObjectMapper().readValue(json, LIST_TYPE);
  4. catch (Exception var4) { Exception ex = var4; if (check.isAssignableFrom(ex.getClass())) { throw new JsonParseException(ex); }
    检查捕获的这个var4异常是否是我们传入的check异常的实例或者是其子类的一个实例,如果是,就抛出JsonParseException(ex)

5.else { ReflectionUtils.rethrowRuntimeException(ex); throw new IllegalStateException(ex); }
不是预期的异常,就抛出IllegalStateException(ex)

进行改善

  1. 对ObjecMappper使用一个单例的构造方法
  2. 使用tryParse来对try-catch进行优化
public class JacksonUtil {public JacksonUtil() {}//单例模式 创建objecMapperprivate final static ObjectMapper OBJECT_MAPPER;static {OBJECT_MAPPER = new ObjectMapper();}private static ObjectMapper getObjectMapper() {return OBJECT_MAPPER;}// 以后就可以直接调用这个方法 而不用再传一个异常private static <T> T tryParse(Callable<T> parser) {return tryParse(parser, JacksonException.class);}/*/参考的是 springboot源码  */private static <T> T tryParse(Callable<T> parser,Class<? extends Exception> check) {try {return parser.call();} catch (Exception ex) {if (check.isAssignableFrom(ex.getClass())) {throw new JsonParseException(ex);}throw new IllegalStateException(ex);}}/*** 序列化方法* @param object* @return*/public static String writeValueAsString(Object object){return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().writeValueAsString(object);});}/*** 反序列化* @param content* @param valueType* @return* @param <T>*/public static<T> T readValue(String content, Class<T> valueType) {return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().readValue(content, valueType);});}/*** 反序列化list* @param content* @param paramClasses* @return* @param <T>*/public static <T> T readListValue(String content, Class<?> paramClasses) {JavaType javaType = JacksonUtil.getObjectMapper().getTypeFactory().constructParametricType(List.class, paramClasses);return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().readValue(content, javaType);});}}
http://www.mmbaike.com/news/112182.html

相关文章:

  • 大兴企业官网网站建设报价网盘网页版登录入口
  • 苹果软件 做ppt模板下载网站有哪些内容免费做网站的网站
  • 新蔡哪有做网站建设的友情链接多少钱一个
  • 成都 网站建设培训学校浏览器如何推广自己网站
  • 网站建设报价单及项目收费明细表怎么制作网页推广
  • 网站建设与网页设计课百度旗下13个app
  • 上海网站建设怎么360安全浏览器
  • jsp高级动态网站开发网站生成app工具
  • 乐清网站制作免费下载百度一下
  • qq空间搬家wordpress百度推广账户优化
  • 购物网站制作多少钱免费建立个人网站官网
  • wordpress 做网站seo内部优化包括哪些内容
  • 办公设备网站推广怎么做seo培训赚钱
  • 网页搜索器网站关键词优化排名公司
  • 学院网站建设作用关键词小说
  • 学做网站好吗推荐一个seo优化软件
  • 巢湖路桥建设集团有限公司网站济宁seo公司
  • 公司网站建设推荐什么是seo关键词优化
  • 做游戏网站赚钱么网络营销软文范例300字
  • 2018年公司网站建设费分录新闻发稿推广
  • 海珠营销网站建设报价网站关键词优化排名公司
  • 重庆网站建设培训班小广告公司如何起步
  • 西安政府网站建设公司做百度推广的业务员电话
  • wordpress ckplay播放合肥seo
  • 网站建设 在线购买seo排名方案
  • 网易建站模板推广引流渠道有哪些
  • 网站开发与维护算什么职位it行业培训机构一般多少钱
  • 网站主页模板百度怎么注册自己的网站
  • 怎么做 废旧回收网站seo站外优化最主要的是什么
  • 沈阳项目天津seo公司