ObjectInputStream和ObjectOutputStream两个类可以在流中读取和写入对象,但是写入的时候简单,我可以写入多种不同的实现了java.io.Serializable接口的对象,但是有一个很重要的的问题,那就是读取的时候。但是网上大多数都是向文本中写入,我是要通过socket传送对象,问题就在读取的时候,怎么知道当前读取的哪种类型的对象呢?比如我可以在发送端连续发送3个自定义的apple对象,然后再连续发送2个orange对象,也可以先连续发2个apple,再连续发3个orange对象,这样一来,在读取对象时虽然可以readObject();但是读来的时候只是一个Object对象,我如何才能知道对象是哪种类型的呢?还请高手指点啊!

解决方案 »

  1.   

    关于开发中你遇到的这种需求,我还是建议用rmi来实现,这样的话可以直接一点
    关于你说到的用socket来实现传送对象,我没有试过。对于你当前碰到的对象类型问题,你可以试着通过接口(Interface)来实现,让你传送的这几个类都继承一个统一的接口,然后接收的时候,把实例化的对象都指向这个接口就可以了
      

  2.   

    呵呵,楼上和我的想法一样,但是那样太过麻烦了,Object对象实现的有getClass()方法,不知道能不能返回当前对象的类名称,可以的话,也可以满足要求。RMI调用实现复杂,并且速度上实在不敢恭维。呵呵
    还有什么好的建议吗?方便,快捷,高效的。
      

  3.   

    恩 可以做个消息号吧 我的想法比较简单效率也不要但是我以前做过一回类似的当事我们用的是一个msg 定义一个msg 结束的时候判读msg是什么,做相应处理,我觉得可以和楼上得结合着用传送得是map key当中就是对象的msg信息,value是具体对象,我觉得你得需求要是不高得话应该可以
     
      

  4.   

    楼主自己不是已经说了吗?用 getClass() 就可以知道 ObjectInputStream 中得到的 Object 的类型了。如果你不怕麻烦,用反射可以得到所有你想知道的信息。
      

  5.   

    可是获得Object类型后如何进行强制类型转化呢?
      

  6.   

    我遇到过类似的问题,或许对你有点帮助.
    public class fruit{}
    public class apple extends fruit{}
    public class orange extends fruit{}
    public class ...... extends fruit{}
    所有类都继承fruit,写入和读出对象流的时候都用fruit类.具体用到那个函数的时候,可以动态绑定.
      

  7.   

    object instanceof A
    instanceof 可以做类判断,在转型之前判断一下就可以
      

  8.   

    因为socket通讯来说,类型是可知的,但是顺序是未知的,不知道这样干是否可以呢?有没有更好的办法啊!Object object=in.readObject();
    String className=object.getClass();//获得当前对象的真实类型的名字
    if(className.equle("AAAAA")){
    AAAAA a=(AAAAA) Object;
    ……
    ……
    ……
    }
    else if(……)

    ……
    ……
    ……