非常奇怪的问题,代码如下,包含运行结果//先自定义对象,包括ArrayList,String,Vector
class TestObject implements Serializable{
ArrayList list;
Vector vector;
String str;
TestObject(){
}
TestObject(TestObject to){
this.list=to.list;
this.str=to.str;
this.vector=to.vector;
}
public void setList(ArrayList al){
this.list=al;
}
public ArrayList getList(){
return this.list;
}
public void setStr(String str){
this.str=str;
}
public String getStr(){
return this.str;
}
}//接受端代码
import java.util.ArrayList;
import java.util.Vector;
import java.net.*;
import java.io.*;
class ReceiveObject{
ServerSocket ss;
Socket s;
ObjectInputStream ois;
ObjectOutputStream oos;

ReceiveObject(){
    try {
     //构建套接字,输入输出流
ss=new ServerSocket(5566);
     s=ss.accept();
     ois=new ObjectInputStream(s.getInputStream());
     oos=new ObjectOutputStream(s.getOutputStream());
     while(true){
     //将接受到的对象打印
     TestObject testObject=(TestObject)ois.readObject();
     System.out.println ("received list is : "+testObject.getList());
     System.out.println ("received str is : "+testObject.getStr());
     }
    }
    catch (Exception ex) {
     ex.printStackTrace();
    }
}
public static void main(String [] args){
new ReceiveObject();
}
}//发送对象代码import java.util.ArrayList;
import java.util.Vector;
import java.net.*;
import java.io.*;
class SendObject{
Socket s;
ObjectInputStream ois;
ObjectOutputStream oos;
TestObject testObj;//自定义对象,实现Serializable接口
ArrayList array=new ArrayList();
SendObject(){
try {
//构建套接字,输入输出流
s=new Socket("127.0.0.1",5566);
     oos=new ObjectOutputStream(s.getOutputStream());
     ois=new ObjectInputStream(s.getInputStream());
     testObj=new TestObject();//创建自定义对象
     //创建本地对象
     String str="Test1";
     array.add("First");
     //添加本地对象到自定义对象中
     testObj.setList(array);
     testObj.setStr(str);
     //发送自定义对象
     oos.writeObject(testObj);
     //改变元素的内容
     array.add("Second");
     str="Test2";
     //将改变后的对象再次加入到自定义对象中
     testObj.setList(array);
     testObj.setStr(str);
     //再次发送
     oos.writeObject(testObj);
    }
    catch (Exception ex) {
     ex.printStackTrace();
    }
}
public static void main(String [] args){
new SendObject();
}
}
程序执行后的结果出乎意料received list is : [First]
received str is : Test1
received list is : [First]
received str is : Test1这个问题我研究好久了,究竟是为什么?Tell me y!!!
神阿,告诉我怎么解决?

解决方案 »

  1.   

         System.out.println ("received list is : "+testObject.getList());
         System.out.println ("received str is : "+testObject.getStr());会不会打印的getlist打印list中的第一个啊关注中
      

  2.   

    写完一个对象以后调用.reset()方法一下就好了。
    //再次发送
    oos.reset();
    oos.writeObject(testObj);
      

  3.   

    代码挺不清晰,看起来累。1。在发送前打印,检查发送的数据是否正确,排除发送的问题。
    2。在接收后将接受的所有内容也检查一次,排除程序理解的问题
    3。可先排除array,进行简单的TestObject测试,成功再逐步加内容,缩小程序出错的范围
      

  4.   

    你的意思是实现socket通信吧,我有调试好的程序你可以参考一下。EMAIL:[email protected]
      

  5.   

    TestObject(TestObject to){
    this.list=to.list;
    this.str=to.str;
    this.vector=to.vector;
    }
    *********************************
    是不是受了C++的影响呀,为什么这样写,有什么好处,不如自己再重新new一个对象了。
    另外你下面这两行你不觉得会有问题吗?
    this.list=to.list;
    this.vector=to.vector;
    你能保证这两个对象在你使用的时候不被其它的修改吗?java里面有一个Clone()方法,你最好把它们Clone过来再使用。