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

海南高端网站建设网站建设主机耗电量

海南高端网站建设,网站建设主机耗电量,机械配件网站建设,wordpress模版修改在json解析方面 我们常见有下面几方面困扰 1. moshi code-gen能自动生成适配器,序列化效率比gson快,但是自定义程度不如gson,能java kotlin共存 且解决了默认值的问题 2.gson api 强大自由,但是 第一次gson的反射缓存比较慢,而且生成对象都是反射,除非主动注册com.google.gson…在json解析方面 我们常见有下面几方面困扰 1. moshi code-gen能自动生成适配器,序列化效率比gson快,但是自定义程度不如gson,能java kotlin共存 且解决了默认值的问题 2.gson api 强大自由,但是 第一次gson的反射缓存比较慢,而且生成对象都是反射,除非主动注册com.google.gson.InstanceCreator 这个人工机械 3.kotlin ks 效率还行,但是不支持java  api自由性没有gson强 目前可能更偏向gson 同时也要解决默认值的问题 最大的一处难点是在jvm 获取申明的枚举,先看一下gson是怎么解决的   private static final class EnumTypeAdapterT extends EnumT extends TypeAdapterT {private final MapString, T nameToConstant new HashMapString, T();private final MapT, String constantToName new HashMapT, String();public EnumTypeAdapter(final ClassT classOfT) {try {// Uses reflection to find enum constants to work around name mismatches for obfuscated classes// Reflection access might throw SecurityException, therefore run this in privileged context;// should be acceptable because this only retrieves enum constants, but does not expose anything elseField[] constantFields AccessController.doPrivileged(new PrivilegedActionField[]() {Override public Field[] run() {Field[] fields classOfT.getDeclaredFields();ArrayListField constantFieldsList new ArrayListField(fields.length);for (Field f : fields) {if (f.isEnumConstant()) {constantFieldsList.add(f);}}Field[] constantFields constantFieldsList.toArray(new Field[0]);AccessibleObject.setAccessible(constantFields, true);return constantFields;}});for (Field constantField : constantFields) {SuppressWarnings(unchecked)T constant (T)(constantField.get(null));String name constant.name();SerializedName annotation constantField.getAnnotation(SerializedName.class);if (annotation ! null) {name annotation.value();for (String alternate : annotation.alternate()) {nameToConstant.put(alternate, constant);}}nameToConstant.put(name, constant);constantToName.put(constant, name);}} catch (IllegalAccessException e) {throw new AssertionError(e);}}Override public T read(JsonReader in) throws IOException {if (in.peek() JsonToken.NULL) {in.nextNull();return null;}return nameToConstant.get(in.nextString());}Override public void write(JsonWriter out, T value) throws IOException {out.value(value null ? null : constantToName.get(value));}}gson的实现 是第一次反射(TypeAdapter 对于rawType gson本身会缓存) 他这个时候能读取到class,但是编译注解这个时候并不能得到class, 那么又查询了官方文档,官方的解释不在是class 而是Element和TypeName的类 翻译如下: 宽松地说返回直接被该元素包围的元素。 类或接口被认为包含它直接声明的字段、方法、构造函数和成员类型。 包包含其中的顶级类和接口但不被视为包含子包。 模块将包包含在其中。 封闭的元素可以包括隐式声明的强制元素。 其他种类的元素目前不被认为包含任何元素 但是随着 API 或编程语言的发展这种情况可能会发生变化。 返回 包含的元素如果没有则为空列表 API注意事项 可以使用 ElementFilter 中的方法来隔离某些类型的元素。 也可以看看 TypeElement.getEnclosureElements、PackageElement.getEnheldElements、ModuleElement.getEnheldElements、Elements.getAllMembers 吉林斯 8.8.9 默认构造函数 吉林斯 8.9 枚举 修改 9 规格 联合项目管理系统 那么我理解jvm 元数据matadata存储在这个数组里面 我打印了一下 得到枚举的全部申明 包括enum_entry不是enum class还有valueOf等方法 枚举数据在元数据里面 values(),valueOf(java.lang.String),HELLO,HI,FINE,THANKS,intValue,TestEnum(int),getIntValue() 得按类型过滤出 申明的enum_constant val enumConstants enumElement?.enclosedElements?.filter {it.kind ElementKind.ENUM_CONSTANT} ?: listOf() 最终折腾了半天 终于出来了 import com.google.gson.annotations.SerializedName import javax.lang.model.element.ElementKind/*** xxf:生成编译时枚举常量池生成hashmap*/ internal class EnumTypeParser {internal val nameToConstant: MutableMapString, Any mutableMapOf()internal val constantToName: MutableMapAny, String mutableMapOf()/*** 枚举数据在元数据里面 values(),valueOf(java.lang.String),HELLO,HI,FINE,THANKS,intValue,TestEnum(int),getIntValue()* param enumElement*/constructor(enumElement: javax.lang.model.element.Element?) {val enumConstants enumElement?.enclosedElements?.filter {it.kind ElementKind.ENUM_CONSTANT} ?: listOf()enumConstants.forEach { constant -val annotation: SerializedName? constant.getAnnotation(SerializedName::class.java)var name constant.simpleName.toString()//本身名字nameToConstant[name] constant//注解名字 和别名名字if (annotation ! null) {name annotation.valuefor (alternate in annotation.alternate) {nameToConstant[alternate] constant}}nameToConstant[name] constantconstantToName[constant] name}//排序一下 代码好看一点nameToConstant.toSortedMap().run {nameToConstant.clear()nameToConstant.putAll(this)}//排序一下 代码好看一点constantToName.toSortedMap(Comparator { o1, o2 -constantToName[o1]!!.compareTo(constantToName[o2]!!)}).run {constantToName.clear()constantToName.putAll(this)}}} 运行效果: 这样就替代了gson 枚举0反射,同样的读写都是o(1) 更多类型的实现 请参考我的开源项目 gson_plugin 这个可能是业界最快的json解析方式 最快的json解析框架
http://www.hkea.cn/news/14430243/

相关文章:

  • 外贸网站建设的败笔怎样做个做外贸的网站
  • 设计网站公司搜索y湖南岚鸿知名南京网站建设知识
  • 请多记几个本站域名防止失联南宁网约车租赁公司
  • 厦门建设工程信息造价网站邢台网站改版开发
  • 网站推广服务好公司排名网站词库怎么做
  • 如何为企业做网站成都网站建设冠辰哪家强
  • 广州网站建设建设网站设计方案和技巧
  • 河南生产型企业网站建设肇东网页设计
  • 百石网怎么做网站做网站学好哪些软件
  • 韩国食品网站设计欣赏wordpress动静分离
  • 单页设计网站app网站平台建设方案
  • 网站怎么百度收录天津哪里能做网站
  • 邢台营销型网站建设济南市建设行政主管部门网站
  • jsp网站 值班功能惠州市seo上词
  • 廊坊网站关键词优化网站ui案例
  • 网站系统建设系广告经营者青岛城乡建设局网站首页
  • 网站建设人员潍坊做网站潍坊做网站
  • 济南网站建设推荐q479185700上快甘肃高端建设网站
  • 前端网站开发心得体会seo工程师招聘
  • 网站建设和梅州建站
  • 阳泉哪里做网站网站和公众号的区别是什么
  • 免费的ppt网站泰州企业建站系统
  • 网站建站网站626969自己做一个购物网站
  • 英文网站报价wordpress 月光博客
  • 毕业设计网站源码石家庄建站工具
  • 张掖市作风建设年活动网站旅游网站设计模板
  • 深圳网站维护优化杭州网站开发后端招
  • 做网站要自己租服务器网站建设理论基础
  • 网站都需要什么类别上海十大营销策划公司排名
  • 百度如何把网站做链接深圳市建设工程交易服务