JAVA没有结构体,我用基于HashMap的一个类来实现
来源:互联网 发布:python爬虫 编辑:程序博客网 时间:2024/04/29 01:21
JAVA没有机构体,有时候会觉得很不方便,尤其是在进行网络通信时,如果数据包都用字符串,程序的可读性和可升级性都会变得很差。
下面是我在用JAVA实现TCP通信时的实现方法。
/*
JAVA没有结构体,我用基于HashMap的一个类来实现:
这个类,实现了二个方法:
1、pack:将HashMap中一个一个的字符串,按照事先定义的宽度,编码进一个字节数组;
2、unpack:将一个字节数组,按照事先定义的宽度拆解成一个一个的字符串,保存在这个HashMap中。
每个字符串在字节数组中所占的宽度,用这个二维数组来定义:
Object[][] StructFriend={
{"ID",8},
{"IP",24},
{"port",6},
{"LocalIP",24},
{"LocalPort",6},
{"reserved1",8},
{"reserved2",8}
}
///////////////// 对应的C语言结构体 /////////////////
struct StructFriend{
char ID[8];
char IP[24];
char port[6];
char LocalIP[24];
char LocalPort[6];
char reserved1[8];
char reserved2[8];
}
*/
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.HashMap;
/**
* Created by webliv on 2017/11/10.
* www.gooods.com
*/
public class TStruct extends HashMap {
public int getStructSize(Object[][] struct){
int size=0;
for(int i=0;i<struct.length;i++) size+= (int)struct[i][1];
return size;
}
//将hash表中的所有字符串,按照定义的顺序和大小,装入字节数组data
//data中从offset的位置开始装入,结束后返回新的offset位置
public int pack(Object[][] struct,byte[] data,int offset,String CharsetName) throws UnsupportedEncodingException{
Object v;
for (int i=0;i<struct.length;i++) {
v=get((String)struct[i][0]); //从hash表中,取得struct成员变量的值
if (v!=null) {
int n=(""+v).getBytes(CharsetName).length;
if (n>(int)struct[i][1]) n=(int)struct[i][1];
System.arraycopy((""+v).getBytes(CharsetName),0, data,offset, n);
}
offset += (int)struct[i][1];
}
return offset;
}
//将字节数组data中的数据,按照定义的顺序和大小,解码成一个一个的字符串,并装入到hash表中
//data中从offset的位置开始解码,结束后返回新的offset位置
public int unpack(Object[][] struct,byte[] data,int offset,String CharsetName) throws UnsupportedEncodingException{
clear();//清空hash
for (int i=0;i<struct.length;i++) {
put((String)struct[i][0],new String(data,offset,(int)struct[i][1],CharsetName));
offset += (int)struct[i][1];
}
return offset;
}
}
////////////////////////////////////////////////////////////
webliv,西安国咨软件。如要引用请注明出处。
- JAVA没有结构体,我用基于HashMap的一个类来实现
- java集合类之基于HashSet的HashMap的实现
- 谁能帮我做一个用JAVA来实现的FTP服务器??速回!!
- Java实现一个HashMap
- 网上关于sort结构体排序都不完整,我来写一个完整版的
- Java HashMap的实现
- [Java]HashMap的实现
- JAVA hashmap的实现
- java HashMap的实现
- 用hashmap来模拟缓存实现的机制
- 基于数据成员是一个数组来实现的list
- 我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人
- 我用 tensorflow 实现的“一个神经聊天模型”:一个基于深度学习的聊天机器人
- 网上一堆代码,没有一个真正实现curl传图片成功过的,这儿,我来个成功的,超级简单,扩展性强【广告一下】
- java中用HashMap,ArrayList,TreeMap实现一个模拟斗地主发牌的用例
- 用java实现一个基于堆排序的优先队列
- 基于Java实现的一个简单计算器
- 我在思考一个问题:用纯dhtml技术来实现信息交流平台的应用.
- 一分钟了解“matlab实现用对话框手选的方式打开文件”
- 解决 微信、QQ、微博、支付宝 第三方登录 不同应用间用户共享的问题
- atomikos实现分布式事务处理
- C语言实现两个int(32位)整数m和n的二进制表达中找不同位
- ORA-01144: File size (4224000 blocks) exceeds maximum of 4194303
- JAVA没有结构体,我用基于HashMap的一个类来实现
- 简单数组FIFO
- React相关Dom约束性和非约束性操作
- 普通程序员如何向人工智能方向转型?
- Docker 常用命令收录 -- 持续更新
- 使用docker的oracle
- 薪资加五百不是梦!教你如何运用PHP自动加载
- 函数指针--c++随笔
- 友元/C++