我写了一个程序,不停地向文件写入一个类的对象,
可是这个对象改变后,写入文件里的对象竟然没有改变例如:
有一个类A
class A{
int x;}
A a = new A();
objOut = new ObjectOutputStream(new FileOutputStream("1.txt"));//线程1:不断向文件写入对象
while(true){
objOut.writeObject(a);
System.out.println(a.x);//用来验证a是否发生变化
}//线程2:不断改变对象a元素的值
while(true){
a.x++;
}非常奇怪的是,那句输出a.x的结果可以看出x的确发生变化了,可是写入文件里面的x却一直没有变化
一直都是a刚初始化那时候的值。
请问这是为什么?
可是这个对象改变后,写入文件里的对象竟然没有改变例如:
有一个类A
class A{
int x;}
A a = new A();
objOut = new ObjectOutputStream(new FileOutputStream("1.txt"));//线程1:不断向文件写入对象
while(true){
objOut.writeObject(a);
System.out.println(a.x);//用来验证a是否发生变化
}//线程2:不断改变对象a元素的值
while(true){
a.x++;
}非常奇怪的是,那句输出a.x的结果可以看出x的确发生变化了,可是写入文件里面的x却一直没有变化
一直都是a刚初始化那时候的值。
请问这是为什么?
这句话结束,a的内存地址在你这段程序中就不变了,你写到文件里的应该是a的toString结果,a不变,那个值就不变。不管你把a.x改多少遍。
while(true){
a = new A();
objOut.writeObject(a);
}
while(true){
a = new A();
objOut.writeObject(a);
}
不行啊,我调试得快疯了,代码太乱了贴出来怕你们晕了,能不能麻烦你给我写个最简单来的例子,如何把一个不断变化的对象发给对方,不停地发。我不管怎么试,不管对象怎么改变,对方收到的对象始终是第一次收到的那个。
while(true){
a = new A();
objOut.writeObject(a);
}
不行啊,我调试得快疯了,代码太乱了贴出来怕你们晕了,能不能麻烦你给我写个最简单来的例子,如何把一个不断变化的对象发给对方,不停地发。我不管怎么试,不管对象怎么改变,对方收到的对象始终是第一次收到的那个。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class FileObjectTest implements Serializable{
double i=0;
public FileObjectTest(){
this.i = Math.random()*1000;
} public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO Auto-generated method stub
ObjectOutputStream objOut1 = new ObjectOutputStream(new FileOutputStream("/Users/user/csdn_test/1.txt"));
ObjectOutputStream objOut2 = new ObjectOutputStream(new FileOutputStream("/Users/user/csdn_test/2.txt"));
objOut1.writeObject(new FileObjectTest());
objOut2.writeObject(new FileObjectTest()); }}
user ~/csdn_test$cat 1.txt
¬sr%com.withiter.csdn.test.FileObjectTesKÓìADixp@3J£ŠG—user ~/csdn_test$cat 2.txt
¬sr%com.withiter.csdn.test.FileObjectTesKÓìADixp@Ž#{_VAuser ~/csdn_test$