V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
miclushine
V2EX  ›  问与答

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

  •  
  •   miclushine · 2017-04-19 17:53:59 +08:00 · 1869 次点击
    这是一个创建于 2567 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2017-04-20 00:23:37 +08:00
    misaka19000
        1
    misaka19000  
       2017-04-19 18:01:37 +08:00 via Android
    这还要啥库,自己写一个啊
    miclushine
        2
    miclushine  
    OP
       2017-04-19 18:13:53 +08:00
    @misaka19000 自己写了个试过了,还想问问有没有现成高效的实现方案
    xgfan
        3
    xgfan  
       2017-04-19 18:16:12 +08:00
    反射,递归,简单用用估计几十行。
    nutting
        4
    nutting  
       2017-04-19 18:20:46 +08:00
    自己写最高效。难道转成 json ?再解析?
    Lonely
        5
    Lonely  
       2017-04-19 18:23:57 +08:00 via iPhone
    apache 有个 beanutils
    miclushine
        6
    miclushine  
    OP
       2017-04-19 18:25:33 +08:00
    @nutting 其实我就突然想到,序列化传输对象的时候,只穿属性值,不传属性名,因为几十个属性的对象,名字也占好大一块了,所以就想有没有高效的方法去实现
    Cbdy
        7
    Cbdy  
       2017-04-19 18:28:33 +08:00 via Android
    java 有个 cglib ,应该速度最快吧
    Ouyangan
        8
    Ouyangan  
       2017-04-19 18:54:51 +08:00   ❤️ 1
    #5+1
    先转 map 再遍历转 list 吧.
    六七行代码就行了.

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

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

    @incompatible protobuf 有尝试过,不过有点太复杂了,生成模板的工具要加超多代码进来,这个序列化速度是比 json 快很多的,不过不清楚同样的数据是否能显著减少数据量。如果有其他传输优化的方法也欢迎给介绍下,嘿嘿。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4971 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:24 · PVG 17:24 · LAX 02:24 · JFK 05:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.