非常奇怪的问题,代码如下,包含运行结果//先自定义对象,包括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!!!
神阿,告诉我怎么解决?
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!!!
神阿,告诉我怎么解决?
解决方案 »
- java,向下转型的疑问!
- mysql中文编码问题
- Swing中使用什么组件/技术 可以给TextField增加类似google/百度 输入栏下的提示框
- java怎么调用*.bat文件,请帮忙解决!!!!
- 关于一个JAVA测试问题
- java语言编一个工具 尽情发表意见喔
- 我想在对话框的初始化时关闭它,怎么实现?
- JBuilder5.0 Activation Key?
- JFreeChart 柱状图和折线图放在一起,只有左边的轴,怎样做?
- Java新手求解答
- 麻烦大家看看这个错误(```有点郁闷)
- 求...解... Overload和Override的区别? Overload是语言的特性, Override是面向对象多态的体现
System.out.println ("received str is : "+testObject.getStr());会不会打印的getlist打印list中的第一个啊关注中
//再次发送
oos.reset();
oos.writeObject(testObj);
2。在接收后将接受的所有内容也检查一次,排除程序理解的问题
3。可先排除array,进行简单的TestObject测试,成功再逐步加内容,缩小程序出错的范围
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过来再使用。