私有封装协议的对象化- 未命名- JavaEye技术网站
最近做一个应用,socket的客户端,使用一种自定义的数据组装格式。
首先考虑是把发送的东西写成对象,比起直接拼字符串应该是好很多。
这样的话就要考虑,如何把对象,按照指定的格式拼装成一串字符,以及如何把接收到的字符串拼装成一个对象。
最开始的时候设想,每个传送的对象,重写toString()方法,来把自身格式化。
接着,觉得这么多对象,每个对象一个类似的方法,代码冗余太多。
于是想写一个基础对象,在里面写toString()方法,然后让其他的传送对象继承这个基础对象。
考虑到子类继承父类的方法,再访问子类的自身属性等等这么多东西,写的时候干脆另外写了一个encoder类,用于传送对象的编码。
写了一个静态编码方法,接受一个Object参数,再用反射来获得自身的类,字段,以及字段类型,再把字段根据类型组装好,返回一个完成编码的String。
写好了一跑,发现不行~~!
原因是,Class的getFields()方法只能获得public的字段,而传送的对象是标准bean写法,一个私有的成员属性加两个public的get和set,这样,反射就读不到字段了。
第二个原因,getFields()获得所有的公开字段,但是不保证顺序!而格式协议上是规定好的顺序,乱不得。

想了想,修改这个静态编码方法的参数为Object...args,变长Object列表,这样来保证顺序,使用的时候,需要把对象的属性给依次传递过来,Encoder.parseRequest(request.getNumber(),request.getUser(),request.getPass());

这样,编码程序终于能正常工作了~~然后考虑解码问题
郑重声明:资讯 【私有封装协议的对象化- 未命名- JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——