1
misaka19000 2017-04-19 18:01:37 +08:00 via Android
这还要啥库,自己写一个啊
|
2
miclushine OP @misaka19000 自己写了个试过了,还想问问有没有现成高效的实现方案
|
3
6IbA2bj5ip3tK49j 2017-04-19 18:16:12 +08:00
反射,递归,简单用用估计几十行。
|
4
nutting 2017-04-19 18:20:46 +08:00
自己写最高效。难道转成 json ?再解析?
|
5
Lonely 2017-04-19 18:23:57 +08:00 via iPhone
apache 有个 beanutils
|
6
miclushine OP @nutting 其实我就突然想到,序列化传输对象的时候,只穿属性值,不传属性名,因为几十个属性的对象,名字也占好大一块了,所以就想有没有高效的方法去实现
|
7
Cbdy 2017-04-19 18:28:33 +08:00 via Android
java 有个 cglib ,应该速度最快吧
|
8
Ouyangan 2017-04-19 18:54:51 +08:00 1
#5+1
先转 map 再遍历转 list 吧. 六七行代码就行了. commons-beanutils 有个 BeanMap 直接可以 bean 转 map 不过没理解楼主的需求 , 如果序列化传输的话直接选择成熟的序列化协议,比我们自己定义的靠谱多了 , 楼主可以详细说明下使用场景 |
9
fnd 2017-04-19 19:05:00 +08:00
自己写啊,反射、遍历
|
10
miclushine OP @Ouyangan 就是一个对象吧,转换成 Json 传输到服务器,这个 json 里都是对象里属性名和属性值的键值对。只要是传这一种对象,属性名都是要重复传输的,但是名字肯定是不变的嘛,就是值变了,我就想怎么只传值,收到后再反序列化为对象。减少传输量。
|
11
miclushine OP @Ouyangan 这个 BeanMap 功能跟我需要的差不多,再加点转换的代码,我觉得大致可以实现我的需求了,谢谢啊
|
12
Ouyangan 2017-04-19 21:41:17 +08:00 1
@miclushine #11 我的意见哈 , 没有必要这样做.
1. json 的库从性能上来说已经非常不错了, 按你的想法其实是减小了数据传输量大小但是也增加了自定义序列化和反序列化 , 相对于整个过程来说性能可能没有提升, 具体还是要压测下 2. 代码少,可读,拓展 , 成熟的协议毕竟都看得懂 ,方便协作. |
13
incompatible 2017-04-19 22:13:20 +08:00 1
这种奇怪的解决方案当然不会有现成的高效的实现方案。你的序列化方案式恐怕没法处理新增或废弃字段的情况吧?
想提升性能你可以考察一下 protobuf 或者 thrift ,这些都是现成的靠谱的方案。 |
14
miclushine OP @Ouyangan 主要是想对网络差的条件下做点优化,有时候网络延迟有两三秒可能,相对来说序列化的消耗可以忽略不计,想多试一些方案,开开脑洞哈哈。
@incompatible protobuf 有尝试过,不过有点太复杂了,生成模板的工具要加超多代码进来,这个序列化速度是比 json 快很多的,不过不清楚同样的数据是否能显著减少数据量。如果有其他传输优化的方法也欢迎给介绍下,嘿嘿。 |