Java实现结构体,让字节流封送简单起来

原创 2012年03月28日 21:08:59

和C/C++不同,Java中没有结构体,联合体。这是Java作为高级语言的进步,但也使得它在进行网络字节流封送上显得捉襟见肘。

这里所指的是在进行网络编程,串口编程等需要和某些C语言中结构体形式定义的协议接口进行通讯时,Java由于缺乏结构体和字节数组之间的有效转换方法,所带来的编程上的困境。

按照通常的想法,我们需要自己去手动的一个字节,一个字节的拼凑,来实现C语言中结构体定义的数据包。在面对大量接口的时候,这样做显然绝非是可行的办法。造成这个问题的根本原因是,指针这一对内存在字节量级操作的语法特性在Java当中是不成立的。其结果就是在C语言里面通过填充结构体来完成的字节流封送编程变得复杂。

既然这是一个相当普遍的问题,那么一定是有先人尝试去解决过的。事实上却是是这样,通过一番努力,终于发现了JavaStructJavolution现成的两个解决方案。我们不妨拿来为我所用。

JavaStruct

http://code.google.com/p/javastruct/wiki/HowToUseJavaStruct

这个实现比较轻量级,POPO的方式,还不支持联合体,但是联合体的问题,在编程中一般是可以避开的。

Javolution

http://javolution.org/

这个类库比较庞大,对结构体和联合体都有支持。


更详细的操作细节,可以参考以上两个链接中给出的内容。有了它们,数据封送在Java中也变得简单起来了,不妨试一下吧。


Java用类实现结构体的功能

我们都知道C/C++里面的结构体在储存数据的时候很方便,但是在Java中没有Struct,但是我们可以用类来实现Struct的功能 与Struct声明功能一样的类的定义: public  clas...
  • li1500742101
  • li1500742101
  • 2013年04月22日 09:35
  • 15449

Java 结构体之 JavaStruct 使用教程<二> JavaStruct 用例分析

使用环境 前一篇在介绍 JavaStruct 类时指定了使用库使用环境为 Java 5 及以上,也即开发我们使用的 JDK 版本为1.5及以上就可以了。以下讲解的用例可以直接将 code 直接粘贴到 ...
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2017年07月21日 14:23
  • 3216

用java语言读取和写人c语音的结构体数据

最近因为要把excel文件的表格数据保存成一个用结构体格式写成的二进制文件,于是研究了一下如何用java来访问二进制数据。 原先的结构体是用c语言来访问的,因为c语言支持结构体指针,因此要访问结构体数...
  • Johnny_nass_hu
  • Johnny_nass_hu
  • 2016年03月25日 22:41
  • 496

java 与C语言传递结构体数据

  • 2017年05月23日 14:29
  • 46B
  • 下载

java 类与结构体转化

大家知道,java是没有结构体的,而java中是用类保存属性 这时
  • u012910363
  • u012910363
  • 2014年07月23日 15:51
  • 893

Java 结构体之 JavaStruct 使用教程<三> JavaStruct 数组进阶

经过前面两篇博客的介绍,相信对于 JavaStruct 的认识以及编程使用,读者已经有一定的基础了。只要理解和实践结合起来,掌握还是很容易的。下面进行一些数组使用方面的实例说明及演示。 在结构体类中使...
  • JAZZSOLDIER
  • JAZZSOLDIER
  • 2017年07月21日 18:07
  • 1251

java解析C结构体框架

jcstruct 地址:http://git.oschina.net/yhIlc/jcstruct/tree/master 介绍   描述:为了解决java与C结构通信过程中结构体解析问题。 ...
  • haozisex
  • haozisex
  • 2017年05月23日 15:41
  • 1052

java用类实现结构体数组功能

import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.Ma...
  • qq_32426313
  • qq_32426313
  • 2017年11月13日 20:30
  • 120

Java中发送结构体

最近给个朋友做个网站的客户端,使用C/S模式,Client为VC6开发,Server为Java,通过Socket通信。由于Client这边为C++,所以,在接受Java发过来的数据包时,需要知道发来的...
  • xwchen
  • xwchen
  • 2007年04月26日 15:17
  • 10490

java和C结构体数据交换

package com.cvicse.naba.service.impl.user; import java.util.ArrayList; import java.util.HashMap; im...
  • tian_yan_jing
  • tian_yan_jing
  • 2012年07月16日 14:19
  • 3879
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java实现结构体,让字节流封送简单起来
举报原因:
原因补充:

(最多只允许输入30个字)