java与C++通信问题
项目中需要java和c++服务器进行通信,C++那边早就写好了,不能动。一开始我的思路是将想要的数据一个个转换为byte数组,然后塞到一个大的byte数组中,用socket一起发过去,这样测试是有效的,C++那边可以正常解析。后来感觉这种方法太烦,想用序列化的方法直接发对象过去,就一直收不到信息了。代码例子如下:
package com.curry.test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte [] byte1 = new byte[4];
byte1 = IntToByteArray(10);
for(int i=0;i<byte1.length;i++){
System.out.print(byte1[i]+" ");
}
System.out.println();
A a1 = new A();
a1.a = 10;
byte[] byte2 = null;
ByteArrayOutputStream bo = new ByteArrayOutputStream();
try {
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(a1);
byte2 = bo.toByteArray();
bo.close();
oo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0;i<byte2.length;i++){
System.out.print(byte2[i]+" ");
}
}
public static byte[] IntToByteArray(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;
}
}
class A implements Serializable{
/**
*
*/
private static final long serialVersionUID = 4230521614686337323L;
int a;
}
下面是输出结果:
10 0 0 0 //第一种我想要的数组
-84 -19 0 5 115 114 0 16 99 111 109 46 99 117 114 114 121 46 116 101 115 116 46 65 58 -75 -44 -2 -119 -3 -71 43 2 0 1 73 0 1 97 120 112 0 0 0 10//这个结果C++那边无法解析