Java类和C结构体之间自动转换

来源:互联网 发布:淘宝联盟怎么看隐藏券 编辑:程序博客网 时间:2024/05/24 01:10

从c/c++/delphi转过来的朋友肯定很不习惯java ,因为java没有指针,没有结构体!通过内存拷贝之后获得的结构体是多么的方便,特别是在网络传输,但是,对于内存流的命令编写,java简直是僵梦,我在网上找了很多的资料,但是都是需要手工编写转换的,那样很容易出错,也很痛苦,因此,我用java的反射机制实现了一种自动转换的方式。具体思路如下:

       1. 声明一个名为Convert的接口,接口有 toByte,fromByte,len三个接口

      2. 创建n各类,分别是 Uint8,Uint16,Uint32 UIint64........然后这几个类分别实现这三个接口。8可以用byte,16可以用short,32可以用 int,64可以用long

      3,.创建命令头  AbstractCmd,分别也实现Convet的三个接口,接口里面的代码用到映射,把凡事实现过Convert的变量逐步调用相应的convet接口,迭代之后得到相应的数据

      4,要注意生命顺序必须和你自己的命令字段一致。


举例 AbstractCmd里面的toByte函数实现:

/** *将实现了Convet接口的变量转换成相应的Byte数组 */@Overridepublic final byte[]  toByte() {    ByteArrayOutputStream outputStream=new ByteArrayOutputStream(len());    for (Field f:this.getClass().getDeclaredFields()) {        try {            if (f.get(this) instanceof Convert){                try {                    Method method= null;                    Object o= null;                    try {                        o = f.get(this);                    } catch (IllegalAccessException e) {                        e.printStackTrace();                    }                    method = o.getClass().getDeclaredMethod("toByte",new Class<?>[0]);                    if (method!=null){                        method.setAccessible(true);                        try {                            outputStream.write((byte [])method.invoke(f.get(this)));                        } catch (IllegalAccessException e) {                            e.printStackTrace();                        } catch (InvocationTargetException e) {                            e.printStackTrace();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                } catch (NoSuchMethodException e) {                    e.printStackTrace();                }            }        } catch (IllegalAccessException e) {            e.printStackTrace();        }    }    return outputStream.toByteArray();}

这里只说出实现思路,不写出具体的实现方式。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 食管胃粘膜异位怎么办 狗狗肿瘤破了怎么办 婴儿胃食道反流怎么办 小儿胃食道反流怎么办 放疗后咳嗽痰多怎么办 胃息肉是恶性的怎么办 老是胃疼,胃胀怎么办 吃完饭之后胃胀怎么办 胃痛胃胀怎么办能缓解 胃胀不消化怎么办快速解决 便秘肛裂了好痛怎么办 胃消化慢还便秘怎么办 11个月婴儿便秘怎么办 80多岁老人便秘怎么办 狗狗便秘拉不出来怎么办 2个月幼犬便秘怎么办 狗狗便秘怎么办吃什么 痔疮又痛又痒怎么办 痔疮肉球特别痒怎么办 长了个小痔疮怎么办 产后4天没大便怎么办 7个月孕妇痔疮怎么办 运动完恶心想吐怎么办 跑步后恶心想吐怎么办 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办 怀孕七个月便秘严重怎么办 怀孕两个月便秘严重怎么办 3岁宝宝上火便秘怎么办 7个月的宝宝贫血怎么办 9个月婴儿贫血怎么办 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办