在c#里序列化对象后用数据报发送给java程序,希望java把该数据包恢复成原来的对象,java收到了字节流但是怎么无法恢复成原来的对象啊?
似乎是两者不能兼容,为什么啊?
import java.net.*;
import java.io.*;
//定义要还原的类,C#里也有同样的结构
class Message implements{
public int a;
public int b;
}
//简单的服务器程序,负责接受客户端发来的数据报
class aserver{
static DatagramSocket ds;
static DatagramPacket pkt;
public static void main(String args[])
{
Message msg=new Message();
byte[] data=new byte[1024];
//生成数据报套接口
try{
ds=new DatagramSocket(8888);
}catch (Exception e){}
//定义用于反序列化的两个对象
ByteArrayInputStream bis;
ObjectInputStream ois;
//等待接受数据报
System.out.println("Waiting...");
pkt= new DatagramPacket(data, 1024);
while (true)
{
try{
ds.receive(pkt);
//将收到的字节数组打印出来
for(int i=0;i<1024;i++)
{
System.out.print(data[i]+" ");
}
//把收到的数据流转换为对象 似乎就是下面三条出现了异常
bis = new ByteArrayInputStream(pkt.getData());
ois = new ObjectInputStream(bis);
msg = (Message)ois.readObject();
//下面两条在运行中一直没有成功!因为上面产生异常,就跳过了
System.out.println("msg.a="+msg.a);
System.out.println("msg.b="+msg.b);
}catch (Exception e)
{
System.out.println("msg failed!!");
}
}
}
}
除了上面的这个JAVA程序外,另外还有一个c#程序aclient,
aclient没有帖出来.但是
1.aclient程序直接发送字节数组给上面的aserver程序,aclient发送的字节数组能原样受到,
2.发送序列化后自定义的Message类对象时,aserver收到一些非零数据(通过
for(int i=0;i<1024;i++)
{
System.out.print(data[i]+" ");
}
打印到屏幕的);
3.但是收到的字节流还原成Message对象时失败了!
请问c#和java之间的序列化有什么要注意的啊??
为什么明明收到了数据,但是反序列化会失败啊?
c#和java之间的序列化要怎么才能兼容,互相通用呢?
一个关于c#,java 对象序列化的问题!