问一下各位高手,JAVA里的Socket类可不可以传输自定义的对象。如果不行要用什么传输啊!!!!

解决方案 »

  1.   

    呵呵!!我不清楚!但是对象要是要在网络上传输就要进行串行化就可以了吧!
    让你想要传输的对象实现Serializable接口就可以了吧!在J2EE里面是这样的,
    不知道对你有没有帮助!说的不对不要用转头啊!!  ^_^
      

  2.   

    可以
    首先,要传的对象类型应该implements Serializable 
    然后,ObjectOututStream的writeObject, ObjectInputStream的readObject
      

  3.   

    将对象串行化,接收之后再并行化就可以了,对象必须实现Serializable接口。
      

  4.   

    建设看一下 think in java 里边有一单元是讲这个问题的
      

  5.   

    最低要求是 实现 java.io.Serializable 接口, readObject & writeObject 如果没有的话, JVM 有默认的实现途径, 如果自己写 readObject & writeObject 要保证该写得都写了,也不要重复写而浪费时间和带宽,因为同一对象可能被多个地方引用了而被写出多次, 可以用一个 IdentityHashMap 或者 System.identityHashCode(obj) 跟踪已经写过的。 然后 添加  private static final long serialVersionUID = XXXXXXXXXXXXL ;
    以保证Socket 2 端虚拟机在自己的类库中找到的版本不同时也能认为他们是同一个东西 (比如 一段用的类库和另一端稍有不同,版本升级了之后 , 两边的这个UID 一样就行)。
    新的 Eclipse 3 在 一个类 直接实现java.io.Serializable 或继承实现了 java.io.Serializable 的类没有提供 serialVersionUID 时 会给出警告 , 就源自于此。 
      

  6.   

    humanity你说的我看不懂,呵呵,我是刚学JAVA比较菜。我是用的是JB9,我要传输的那个对象没有任何定义方法(相当于一个结构),不过数据成员的有一项是个数组(String类型)。而且我将所有的数据成员均定义为public。我已经将这个要传输的对象实现了Serializable接口。
    我想问一下高手这样接收和发送行吗?//socket是个Socket类型的对象
    ObjectOutputStream output=new ObjectOutputStream(socket.getOutputStream);
    ObjectInputStream input=new ObjectInputStream(socket.getInputStream);
    output.WriteObject(topacket);//topacket是那个要传输的对象
    Packet receivePacket=null;//Packet这个类实现了Serializable接口,是要传输的类
    receivePacket=input.readObject();
      

  7.   

    如果在同一个 应用程序中的话, 不会有问题,
    但是如果 Socket 两端是不同的 JVM 的话, 可能提示类找不到,
    就要提供  private static final long serialVersionUID = XXXXXXXXXXXXL .
    两边的类即使一个版本 1.2 , 一个  1.3 ,但是 上面这个UID 是一样的话, 
    JVM 也会认为是同个东西.