我使用 序列化对象(ByteArrayOut/InputStream;ObjectOut/InputStream)
public static byte[]objectToByte(Object object)
{
byte[] bytes = null;
try  {
    //object to bytearray
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(object);     bytes = bo.toByteArray();     bo.close();
    oo.close();
}
catch(Exception e) {
    e.printStackTrace();
}
return bytes;
}public static Object byteToObject(byte[] bytes) throws Exception
{
java.lang.Object obj = null;
//bytearray to object
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi); obj = oi.readObject(); bi.close();
oi.close();
return obj; }我的类public class Message implements   Serializable{

String sendName;
String receiveName;
int command;
Date sendDate;
Object content;

public Message()
{

}

public Message(String inSendName,String inReceiveName,int inCommand,Date inSendDate,Object inContent)
{
this.setSendName(inSendName);
this.setReceiveName(inReceiveName);
this.setCommand(inCommand);
this.setSendDate(inSendDate);
this.setContent(inContent);
}//后面get,set就不贴了
这样序列出来的对象是带包的路径的,服务端和客户端的类对象的包路径一定要一样才能反序列出来,我该怎么弄才能不带路径的序列化啊?或者说有其他方法在网络里传递对象。我的网络传输通道必须是InputStream 和OutputStream;不能使用对象流

解决方案 »

  1.   

    解释一下:客户端:
     
    Message类所在包:com.myclass服务端一:Message类所在包:com.other        通讯结果:不能反序列化对象服务端二Message类所在包:com.myclass      通讯结果:可以反序列成对象结论:只要客户端和服务端类所在包路径相同就可以反序列。
      

  2.   

    如果是用序列化方式传递对象,则所传递对象的类定义必须在客户端和服务端完全一致。另一种方式是只传递数据,比如先将其转换为JSON字符串或者XML,那么对方接收后,随便怎么解析都行。这也是为啥WebService比较火的原因之一,协议跨平台。
      

  3.   

    我在Message中放了Object就是为了提高适用性,所以光传递基本数据类型并不能满足需求啊。
      

  4.   

    ===============================
    客户端:
     
    Message类所在包:com.myclass服务端一:Message类所在包:com.other 通讯结果:不能反序列化对象
    ================================包名不一致,只是Message类一致,在JVM中,类加载器识别为不用的class.所以不能反序列化对象