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();}
这里只说出实现思路,不写出具体的实现方式。
阅读全文
0 1
- Java类和C结构体之间自动转换
- C结构体与JAVA类的相互转换
- 关于C#结构体和byte[]之间的转换
- c#结构体和byte[]之间的转换
- C++结构体和JSON字符串之间的相互转换
- Java工作笔记:关于Java调用C库时,Json和结构体间相互转换
- C++:类的自动转换和强制类型转换
- VC中CString和WPARAM之间的相互转换(结构体变量和WPARAM之间的转换)
- VC中CString和WPARAM之间的相互转换(结构体变量和WPARAM之间的转换)
- 结构体之间的强制类型转换
- 结构体/字符串之间的转换
- opencv图像结构体之间的转换
- 结构体之间的强制类型转换
- java与c之间的参数转换
- java与c之间的参数转换
- java与c之间的参数转换
- java与c之间的参数转换
- golang之cgo---类型转换小试牛刀之C结构体和go结构体转换
- 链表
- 关于PCM音频数据的相关转换算法
- hibernare多对多关系映射
- Java swing创建按钮和标签及处理
- 20170604_分割成回文串
- Java类和C结构体之间自动转换
- Spring配置事务的五种方式
- 前端学习笔记1
- 机器是如何学会歧视的?
- 安卓开发中实用的查看日志方法
- Python 组合实例
- usaco P2736 “破锣摇滚”乐队 Raucous Rockers(搜索或类似01的DP)
- LeetCode OJ 9 Palindrome Number [easy]
- [Leetcode] 121. Best Time to Buy and Sell Stock