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

邢台市住房和城乡建设局网站帮别人做违法网站

邢台市住房和城乡建设局网站,帮别人做违法网站,在seo优化中,免费咨询男科医院Java MessagePack序列化工具(适配Unity) 前言项目代码编写 结 前言 前后端统一用MessagePack,结果序列化的结果不一样,发现C#侧需要给每个类增加描述字段数量的Head,而Java却不用,所以在Java侧封装一下序列…

Java MessagePack序列化工具(适配Unity)

  • 前言
  • 项目
    • 代码编写

前言

前后端统一用MessagePack,结果序列化的结果不一样,发现C#侧需要给每个类增加描述字段数量的Head,而Java却不用,所以在Java侧封装一下序列化和反序列化方法,这样两边解析的内容就完全一致了。
序列化之后效果

项目

代码编写

感觉还有很大的压缩空间

import org.msgpack.core.MessageBufferPacker;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessageUnpacker;import java.io.IOException;
import java.lang.reflect.*;
import java.util.*;public class MessagePackSerializer {public static byte[] serialize(Object obj) throws IOException, IllegalAccessException {try (MessageBufferPacker packer = MessagePack.newDefaultBufferPacker()) {serializeObject(obj, packer);return packer.toByteArray();}}public static <T> T deserialize(byte[] data, Class<T> clazz) throws IOException, IllegalAccessException,InstantiationException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException {try (MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(data)) {return clazz.cast(deserializeObject(clazz, unpacker));}}private static void serializeObject(Object obj, MessageBufferPacker packer)throws IOException, IllegalAccessException {if (obj == null) {packer.packNil();return;}Class<?> clazz = obj.getClass();List<Field> allFields = new ArrayList<>();while (clazz != null) {Field[] fields = clazz.getDeclaredFields();allFields.addAll(Arrays.asList(fields));clazz = clazz.getSuperclass(); // 处理父类字段}packer.packArrayHeader(allFields.size());for (Field field : allFields) {field.setAccessible(true);Object value = field.get(obj);serializeValue(value, packer);}}private static Object deserializeObject(Class<?> clazz, MessageUnpacker unpacker) throws IOException,IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException,ClassNotFoundException {if (unpacker.tryUnpackNil()) {return null;}Object obj = clazz.getDeclaredConstructor().newInstance();int fieldCount = unpacker.unpackArrayHeader();List<Field> allFields = new ArrayList<>();while (clazz != null) {Field[] fields = clazz.getDeclaredFields();allFields.addAll(Arrays.asList(fields));clazz = clazz.getSuperclass();}for (int i = 0; i < fieldCount; i++) {Field field = allFields.get(i);field.setAccessible(true);Object value = deserializeValue(field.getType(), unpacker, getFieldGenericType(field));field.set(obj, value);}return obj;}private static void serializeValue(Object value, MessageBufferPacker packer)throws IOException, IllegalAccessException {if (value == null) {packer.packNil();} else if (value instanceof String) {packer.packString((String) value);} else if (value instanceof Integer) {packer.packInt((Integer) value);} else if (value instanceof Long) {packer.packLong((Long) value);} else if (value instanceof Float) {packer.packFloat((Float) value);} else if (value instanceof Double) {packer.packDouble((Double) value);} else if (value instanceof Boolean) {packer.packBoolean((Boolean) value);} else if (value instanceof List) {List<?> list = (List<?>) value;packer.packArrayHeader(list.size());for (Object item : list) {serializeValue(item, packer);}} else if (value instanceof Map) {Map<?, ?> map = (Map<?, ?>) value;packer.packMapHeader(map.size());for (Map.Entry<?, ?> entry : map.entrySet()) {serializeValue(entry.getKey(), packer);serializeValue(entry.getValue(), packer);}} else {serializeObject(value, packer);}}private static Object deserializeValue(Class<?> type, MessageUnpacker unpacker, Type genericType)throws IOException, IllegalAccessException, InstantiationException, InvocationTargetException,NoSuchMethodException, ClassNotFoundException {if (unpacker.tryUnpackNil()) {return null;} else if (type == String.class) {return unpacker.unpackString();} else if (type == Integer.class || type == int.class) {return unpacker.unpackInt();} else if (type == Long.class || type == long.class) {return unpacker.unpackLong();} else if (type == Float.class || type == float.class) {return unpacker.unpackFloat();} else if (type == Double.class || type == double.class) {return unpacker.unpackDouble();} else if (type == Boolean.class || type == boolean.class) {return unpacker.unpackBoolean();} else if (List.class.isAssignableFrom(type)) {int size = unpacker.unpackArrayHeader();List<Object> list = new ArrayList<Object>(size);for (int i = 0; i < size; i++) {Type listItemType = (genericType instanceof ParameterizedType)? ((ParameterizedType) genericType).getActualTypeArguments()[0]: Object.class;list.add(deserializeValue((Class<?>) listItemType, unpacker, listItemType));}return list;} else if (Map.class.isAssignableFrom(type)) {int size = unpacker.unpackMapHeader();Map<Object, Object> map = new HashMap<Object, Object>(size);Type keyType = (genericType instanceof ParameterizedType)? ((ParameterizedType) genericType).getActualTypeArguments()[0]: String.class;Type valueType = (genericType instanceof ParameterizedType)? ((ParameterizedType) genericType).getActualTypeArguments()[1]: Object.class;for (int i = 0; i < size; i++) {Object key = deserializeValue((Class<?>) keyType, unpacker, keyType);Object value = deserializeValue((Class<?>) valueType, unpacker, valueType);map.put(key, value);}return map;} else {return deserializeObject(type, unpacker);}}private static Type getFieldGenericType(Field field) {return field.getGenericType();}
}

如果有优化会放到下面这个地址
JavaMsgPack-Utility


文章转载自:

http://HCLhaqSr.Lpqgq.cn
http://c4mmkU8l.Lpqgq.cn
http://1SN8te9G.Lpqgq.cn
http://F2MXqQ5w.Lpqgq.cn
http://imH5yzW7.Lpqgq.cn
http://MfC4rVWl.Lpqgq.cn
http://VfZYSPSP.Lpqgq.cn
http://8l0jGAAN.Lpqgq.cn
http://dx9llNc6.Lpqgq.cn
http://v0LhHcsV.Lpqgq.cn
http://ZerzlDcv.Lpqgq.cn
http://hwmEBS0A.Lpqgq.cn
http://cEDXdJKr.Lpqgq.cn
http://2DO5SPRH.Lpqgq.cn
http://nE0gc6lY.Lpqgq.cn
http://4IgAcU9N.Lpqgq.cn
http://t6kAiMf5.Lpqgq.cn
http://vFDzhp9S.Lpqgq.cn
http://LW16B4Gs.Lpqgq.cn
http://sqATK4wE.Lpqgq.cn
http://05LLyRB1.Lpqgq.cn
http://8mxhypOQ.Lpqgq.cn
http://35vFbdSb.Lpqgq.cn
http://Ad7zLKyL.Lpqgq.cn
http://FiCLlMAe.Lpqgq.cn
http://0YteNZct.Lpqgq.cn
http://QhtJzv9x.Lpqgq.cn
http://W2K3iXjp.Lpqgq.cn
http://LfYvpY3E.Lpqgq.cn
http://sFK8GQy2.Lpqgq.cn
http://www.dtcms.com/wzjs/729359.html

相关文章:

  • 室内设计联盟电脑版网站建设优化服务精英
  • 创建网站英文在上海哪个网站比较好
  • 计算机做网站难吗企业网站打包下载
  • php wap网站实现滑动式数据分页网站色调选择
  • 国外域名。国内网站适合小企业的erp软件
  • 外贸网站vps服务器哪个网站可以找设计师做设计
  • 手机网站制作费wordpress ios版
  • 如何布置网站阳江企业网站排名优化
  • iis7.5 发布网站wordpress 煎蛋网插件
  • 网站建设优化推广杭州拓者设计吧网站
  • 网站建设与实践心得体会全国十大电商排名
  • 网站做推广需要营业执照网站开发技术视频
  • 铁岭做网站网站建设所有软件清单
  • wordpress房屋网站模板自己开的网站 可以做代销吗
  • 做网站需要什么资金广州站八个字
  • 卡盟网站怎么做做机器学习比赛的网站
  • 提供网站建设定制整合营销传播经典案例
  • 自己做网站可以随便起名字吗wordpress 自媒体
  • 自贡建设投资有限公司网站做美食的网站可以放些小图片
  • 为什么无法登录建设银行网站网站模板文件怎么下载
  • 中医院网站源码海外求购信息网
  • 智能网站建设步骤小程序微信开发
  • 做电商的进货网站百货店怎么做网站送货
  • 遨游网站建设有限公司推广链接点击器app
  • 校园网站建设重要性广州燃气集团有限公司
  • 中国做机床的公司网站成全视频免费观看在线看第7季高清
  • 站长工具2023最新国产企业官网下载
  • 电子商务网站网络拓扑图网站右下角弹窗代码
  • 购物网站建设情况汇报网站开发框架的作用
  • 新手学易语言多久可以做网站东莞招标网官网