JAVA对象转json字符串性能优化
最近对自己写的elasticsearch客户端框架在进行性能优化,数据插入部分使用的是JAVABean对象方式传参,框架内部使用了fastjson进行对象转json字符串的操作,尝试着使用不同方式进行对象转json字符串操作。找到了一种性能更好的方式,具体请看下面代码段:
package test;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import java.lang.reflect.Field;
import java.util.List;/*** Created by memory_fu on 2021/1/7.*/
public class ReflectasmTest {public static void main(String[] args) throws IllegalAccessException {Person person = new Person();person.setAge(10);person.setId("1");person.setName("傅浩");person.setHobby("ball");int sumCount = 20000000;// 循环次数long l1 = System.currentTimeMillis();for (int i = 0; i < sumCount; i++) {testFastJSON(person);}System.out.println("fastjson方式转换=====: " + (System.currentTimeMillis() - l1) + " ms.");long l2 = System.currentTimeMillis();for (int i = 0; i < sumCount; i++) {testReflection(person);}System.out.println("JAVA反射方式转换=====: " + (System.currentTimeMillis() - l2) + " ms.");}/*** 方式一:* fastjson 对象转为JSON字符串*/public static <T> void testFastJSON(T vo) throws IllegalAccessException {String string = JSON.toJSONString(vo);JSONObject jsonObject = JSON.parseObject(string);String str = jsonObject.toJSONString();
// System.out.println(str);}public static List<Field> fields = null;/*** 反射方式拿到类的field集合*/public static <T> List<Field> init(T vo) {Class<?> aClass = vo.getClass();fields = Lists.newArrayList();for (Class i = aClass; i != Object.class; i = i.getSuperclass()) {Field[] declaredFields = i.getDeclaredFields();for (Field field : declaredFields) {fields.add(field);}}return fields;}/*** 方式二:* 反射方式 对象转为JSON字符串*/public static <T> void testReflection(T vo) throws IllegalAccessException {if (fields == null) {init(vo);}JSONObject jsonObject = new JSONObject();for (Field field : fields) {jsonObject.put(field.getName(), field.get(vo));}String str = jsonObject.toJSONString();
// System.out.println(str);}}
基于2000万数据进行测试结果:
fastjson方式转换=====: 19843 ms.
JAVA反射方式转换=====: 9019 ms.
可以明显看出使用JAVA反射方式性能比使用fastjson要高,具体原因是因为fastjson转换内部有很多数据格式校验,而我们使用反射方式没有这些校验,所以性能提升明显。
结论: 对于业务开发过程中,要进行性能优化并且对数据内容格式已知情况下,可使用 方式二 进行定制性优化。
JAVA对象转json字符串性能优化相关推荐
- Gson案例:Java对象与JSON字符串相互转换
Gson案例:Java对象与JSON字符串相互转换 一.Gson概述 Gson是一个Java类库,可将Java对象转换为相应的JSON形式,也可以将JSON字符串转换为对应的Java对象.Gson是一 ...
- java对象与Json字符串之间的转化(fastjson)
1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency><groupId>com.alibaba</groupId><artif ...
- java对象与json字符串的互相转换
java对象与json字符串的互相转换 1.采用 net.sf.json.JSONObject maven依赖包: 1 <dependency> 2 <groupId>net. ...
- 【实用】Java对象与JSON字符串的互转,实用操作!
最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有: JSON 字符串 转 普通对象 普通对象 转 JSON 字符串 JSON 字符串数组 转 Li ...
- java处理json字符串_常见java对象转换为json字符串处理!!!
1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...
- ObjectMapper实现将Java对象转为json字符串
ObjectMapper调用 添加pom依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId>&l ...
- Java对象 转 JSON 字符串
本案例所有代码均为原创,使用Java1.8类库编写,没有借鉴其他类似工具库和网上论坛博客,也许没有经过充分测试,可能出现未知bug,仅供参考学习使用. Java对象就像一个文件夹一样,没有办法知道其深 ...
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
总结一下自己使用 jackson 处理对象与 JSON 之间相互转换的心得. jackson 是一个用 Java 编写的,用来处理 JSON 格式数据的类库,它速度非常快,目前来看使用很广泛,逐渐替代 ...
- Java详解:java对象转json字符串不加引号
一面 自我介绍 项目中的监控:那个监控指标常见的有哪些? 微服务涉及到的技术以及需要注意的问题有哪些? 注册中心你了解了哪些? consul 的可靠性你了解吗? consul 的机制你有没有具体深入过 ...
最新文章
- python面向对象的优点_Python面向对象编程——总结面向对象的优点
- ef连接mysql报root没有权限_想要远程连接MySQL,赋予root权限没用啊?一直报语法错误...
- 工业富联2018年报来了!上市后首张成绩单大起底
- 07年了,新的一年又开始了
- apcloud混合式开发app学习笔记
- [翻译]Keeping your JavaScript out of the global scope
- 超级日志服务器-Splunk
- vue 日期选择器默认时间_vue-datepicker
- Google要回归国内,百度李彦宏居然不怕?我想笑
- Matlab数据插值-内插、外插
- OpenCV学习(13) 细化算法(1)(转)
- python 学堂在线_学习Python编程学堂在线试题及答案
- WinHex修改二进制数据后无法保存的可能原因
- 计算机四级等级考试网络工程师知识点-【操作系统原理+计算机网络两科完整】
- CentOS6.7 i686上安装JDK7
- 论文写作课程心得体会
- 中国经济形势开年如何看?
- unity3d发布安卓出错plese set the package name
- linux磁盘分区6,Linux学习笔记(6)磁盘分区(LVM)
- 无线通信学习笔记(一)