有没有啥 Java 库或工具可以将一个对象的所有属性值转换成字符串 list 的,不包括属性名?

2017-04-19 17:53:59 +08:00
 miclushine
1869 次点击
所在节点    问与答
14 条回复
misaka19000
2017-04-19 18:01:37 +08:00
这还要啥库,自己写一个啊
miclushine
2017-04-19 18:13:53 +08:00
@misaka19000 自己写了个试过了,还想问问有没有现成高效的实现方案
xgfan
2017-04-19 18:16:12 +08:00
反射,递归,简单用用估计几十行。
nutting
2017-04-19 18:20:46 +08:00
自己写最高效。难道转成 json ?再解析?
Lonely
2017-04-19 18:23:57 +08:00
apache 有个 beanutils
miclushine
2017-04-19 18:25:33 +08:00
@nutting 其实我就突然想到,序列化传输对象的时候,只穿属性值,不传属性名,因为几十个属性的对象,名字也占好大一块了,所以就想有没有高效的方法去实现
Cbdy
2017-04-19 18:28:33 +08:00
java 有个 cglib ,应该速度最快吧
Ouyangan
2017-04-19 18:54:51 +08:00
#5+1
先转 map 再遍历转 list 吧.
六七行代码就行了.

commons-beanutils 有个 BeanMap 直接可以 bean 转 map

不过没理解楼主的需求 , 如果序列化传输的话直接选择成熟的序列化协议,比我们自己定义的靠谱多了 ,
楼主可以详细说明下使用场景
fnd
2017-04-19 19:05:00 +08:00
自己写啊,反射、遍历
miclushine
2017-04-19 19:14:11 +08:00
@Ouyangan 就是一个对象吧,转换成 Json 传输到服务器,这个 json 里都是对象里属性名和属性值的键值对。只要是传这一种对象,属性名都是要重复传输的,但是名字肯定是不变的嘛,就是值变了,我就想怎么只传值,收到后再反序列化为对象。减少传输量。
miclushine
2017-04-19 19:16:54 +08:00
@Ouyangan 这个 BeanMap 功能跟我需要的差不多,再加点转换的代码,我觉得大致可以实现我的需求了,谢谢啊
Ouyangan
2017-04-19 21:41:17 +08:00
@miclushine #11 我的意见哈 , 没有必要这样做.
1. json 的库从性能上来说已经非常不错了, 按你的想法其实是减小了数据传输量大小但是也增加了自定义序列化和反序列化 , 相对于整个过程来说性能可能没有提升, 具体还是要压测下
2. 代码少,可读,拓展 , 成熟的协议毕竟都看得懂 ,方便协作.
incompatible
2017-04-19 22:13:20 +08:00
这种奇怪的解决方案当然不会有现成的高效的实现方案。你的序列化方案式恐怕没法处理新增或废弃字段的情况吧?
想提升性能你可以考察一下 protobuf 或者 thrift ,这些都是现成的靠谱的方案。
miclushine
2017-04-20 00:23:37 +08:00
@Ouyangan 主要是想对网络差的条件下做点优化,有时候网络延迟有两三秒可能,相对来说序列化的消耗可以忽略不计,想多试一些方案,开开脑洞哈哈。

@incompatible protobuf 有尝试过,不过有点太复杂了,生成模板的工具要加超多代码进来,这个序列化速度是比 json 快很多的,不过不清楚同样的数据是否能显著减少数据量。如果有其他传输优化的方法也欢迎给介绍下,嘿嘿。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX