java 类与结构体转化

来源:互联网 发布:淘宝合作协议书 编辑:程序博客网 时间:2024/06/05 19:50

大家知道,java是没有结构体的,而java中是用类保存属性

这时会出现一个问题,如果我们开发的程序客户端用的是java语言(比如android程序),而服务器是用c语言开发

那么如何将java中的属性跟c语言中的结构体进行转化呢

其实实现方法也比较简单:就是讲他们通过变成byte[]数组进行转化

举例说明(此处只写了将java中的字段转化为byte[]数组进行网络传输,服务器就收byte[]数据即可,同理服务器也只要将数据转化为byte[]数组,客户端接受后解析即可)

class Employee {

//此处我们将byte数据大小定死,为了方便,我们可以根据具体情况设计

private byte[] buf = new byte[30];

//将int转为低字节在前,高字节在后的byte数组,因为c中的Int类型和java中类型存储方法不同

//一个低字节在前,一个低字节在后

private static byte[] toLH(int n) {

byte[] b = new byte[4];

b[0] = (byte) (n & 0xff);

b[1] = (byte) (n >> 8 & 0xff);

b[2] = (byte) (n >> 16 & 0xff);

b[3] = (byte) (n >> 24 & 0xff);

return b;

}

//将float转为低字节在前,高字节在后的byte数组

private static byte[] toLH(float f) {

return toLH(Float.floatToRawIntBits(f));

}

//此处将name,id,salary三个字段分别为string,int,float类型转化到byte[]数组中

public Employee(String name, int id, float salary) {

//String类型根据getBytes确定长度,此处我输入的数据占20个字节,所以后面数据从byte[20]开始

byte[] temp = name.getBytes();

System.arraycopy(temp, 0, buf, 0, temp.length);

//java中int占四个字节

temp = toLH(id);

System.arraycopy(temp, 0, buf, 20, temp.length);

//float也根据自己转化成byte后length方法获取长度

temp = toLH(salary);

System.arraycopy(temp, 0, buf, 24, temp.length);

}

//返回要发送的数组

public byte[] getBuf() {

return buf;

}

//发送数据给服务器测试

public static void main(String[] args) {

try {

//因为服务器是本机,所以地址为172.0.0.1

Socket sock = new Socket("127.0.0.1", 8888);

sock.getOutputStream().write(new Employee("jfaskldf", 12413234, 4232.112f).getBuf());

sock.close();

}catch (Exception e) {

e.printStackTrace();

}

}

}


0 0
原创粉丝点击