首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

网络传对象,该怎么处理

2012-05-15 
网络传对象我使用 序列化对象(ByteArrayOut/InputStreamObjectOut/InputStream)Java codepublic static b

网络传对象

我使用 序列化对象(ByteArrayOut/InputStream;ObjectOut/InputStream)

Java code
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;    }

Java code
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;    }

我的类
Java code
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;不能使用对象流



[解决办法]
如果是用序列化方式传递对象,则所传递对象的类定义必须在客户端和服务端完全一致。

另一种方式是只传递数据,比如先将其转换为JSON字符串或者XML,那么对方接收后,随便怎么解析都行。

这也是为啥WebService比较火的原因之一,协议跨平台。
[解决办法]
===============================
客户端:
 
Message类所在包:com.myclass

服务端一:

Message类所在包:com.other 通讯结果:不能反序列化对象
================================

包名不一致,只是Message类一致,在JVM中,类加载器识别为不用的class.所以不能反序列化对象

热点排行