Java实现结构体,让字节流封送简单起来
和C/C++不同,Java中没有结构体,联合体。这是Java作为高级语言的进步,但也使得它在进行网络字节流封送上显得捉襟见肘。
这里所指的是在进行网络编程,串口编程等需要和某些C语言中结构体形式定义的协议接口进行通讯时,Java由于缺乏结构体和字节数组之间的有效转换方法,所带来的编程上的困境。
按照通常的想法,我们需要自己去手动的一个字节,一个字节的拼凑,来实现C语言中结构体定义的数据包。在面对大量接口的时候,这样做显然绝非是可行的办法。造成这个问题的根本原因是,指针这一对内存在字节量级操作的语法特性在Java当中是不成立的。其结果就是在C语言里面通过填充结构体来完成的字节流封送编程变得复杂。
既然这是一个相当普遍的问题,那么一定是有先人尝试去解决过的。事实上却是是这样,通过一番努力,终于发现了JavaStruct和Javolution现成的两个解决方案。我们不妨拿来为我所用。
JavaStruct
http://code.google.com/p/javastruct/wiki/HowToUseJavaStruct
这个实现比较轻量级,POPO的方式,还不支持联合体,但是联合体的问题,在编程中一般是可以避开的。
更详细的操作细节,可以参考以上两个链接中给出的内容。有了它们,数据封送在Java中也变得简单起来了,不妨试一下吧。
Java实现结构体,让字节流封送简单起来相关推荐
- c 结构体转byte_C中结构体和字节流的互换及内存对齐
mystruct p; char buff[50]; memcpy(buff,&p,sizeof(p)); //把p的内容以字节形式拷贝到buff中 mystruct* q; q = (mys ...
- java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )
结构体 类似于Java中的Bean对象,可以将一些变量封装为一个结构体 声明结构体的关键字是struct,也可以通过typedef别名定义 举个栗子: struct Student { //不同的数据 ...
- java中结构体入参_JNA中自定义结构体如何传参?
1.先给出C的头文件里的结构体: typedef struct DetectionZone { Zone zone; DetectionZoneParam param; } DetectionZone ...
- java jni 结构体_JAVA 的JNI,传参为结构体问题: 我在网上找的资料://返回一个结构 public native DiskInfo getStruct();...
Java代码:classDiskInfo{//名字publicStringname;//序列号publicintserial;}//返回一个结构publicnativeDiskInfogetStruc ...
- 一步一步实现一个Java树形结构体方法
废话不多说 ,实现一个树型结构体首先得需要一个对象来装载需要的结构数据: // idprivate Integer id;// 节点名称private String name;// 选中状态priva ...
- C语言--结构体与内存对齐准则简单理解
平时基本不涉及这个问题,被问起才发现没那么简单... 一,结构体:内存中所有类型字节之和 #include<stdio.h> struct icd {int a;char b;double ...
- java map 结构体_业务代码的救星——Java 对象转换框架 MapStruct 妙用
简介 在业务项目的开发中,我们经常需要将 Java 对象进行转换,比如从将外部微服务得到的对象转换为本域的业务对象 domain object,将 domain object 转为数据持久层的 dat ...
- java 类似结构体_Java中如何实现类似C++结构体的二级排序
1:实现Comparable接口 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; ...
- 托管代码C#调用非托管C++ API, 封送嵌套结构体数组
一.前言: 最近这两天由于项目需要,提供给客户的C++ 动态库需要返回自定义结构体数组,网上也查了很多资料, 推荐一本书, <精通.NET互操作:P/Invoke.C++ Interop和COM ...
最新文章
- Android 开源框架Universal-Image-Loader全然解析(一)--- 基本介绍及使用
- oracle数据库gold,Oracle数据库之Oracle GoldenGate 12.2.0.1 安装、升级和删除
- oracle 抽样_深入理解Oracle动态采样
- Android官方开发文档Training系列课程中文版:布局性能优化之ListView的优化
- no route to host什么意思_Day 74:Vue里的route和router
- Kali Linux 从入门到精通(八)-主动信息收集
- Spring Boot: 加密应用配置文件敏感信息
- OpenSSL is not properly installed on your system.
- Mercurial:Hg缓存更改的文件和打patch
- oracle 怎么重启数据库,oracle数据库重启
- SSD的TRIM原理及实践
- 寒风里的凌厉香气,令人沉醉的男士魅力
- vagrant up 失败的原因之一
- 考研数一英语二计算机,考研常识 | 我是考英语一还是英语二?数一二三都有什么区别...
- 网站源码 HTML和源代码有什么区别?他俩是什么关系?
- 九世轮回篇电子计算机乐谱,mc九局九世轮回篇的歌词
- DHCPV4 VS DHCPV6
- JAVA代理模式与动态代理模式
- APP推广可以耍流氓?这些APP黑科技确实很流氓!
- 51单片机的分贝检测仪设计