package objectstream;
import testclass.Person;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
class ObjectStreamDemo{
public static void writeObj()throws IOException{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("Person.txt"));//创建写入指定 OutputStream 的 ObjectOutputStream。
//此构造方法将序列化流部分写入底层流
oos.writeObject(new Person("zhang",12,"haha"));//将指定的对象写入 ObjectOutputStream
/*
对象的类、类的签名(SerialVersionUID),以及类及其所有父类的非瞬态和非静态字段的值都将被写入
*/
oos.close();
}
public static void readObj()throws IOException,ClassNotFoundException{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Person.txt"));//创建从指定 InputStream 读取的 ObjectInputStream。
Person p=(Person)ois.readObject();//将读取流中的一个对象返回,当有多个对象可以采用循环读取
//注意该方法上声明两个异常(IOException,ClassNotFoundException)
System.out.println(p.toString());
}
public static void main(String[] args)throws IOException,ClassNotFoundException{
writeObj();
readObj();
}
}
package testclass;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID=100L;
private String name;
int age;
private static String country="cn";
public Person(String name,int age,String country){
this.name=name;
this.age=age;
this.country=country;//非静态可以访问静态
}
public String toString(){
return name+"..."+age+"..."+country;
}
}
问题就是:结果是 zhang...12...haha但是如果:
先writeObj(),然后readObj()
结果zhang...12...cn
在贴吧有个类似问题:http://bbs.csdn.net/topics/390155251
感觉还是似懂非懂,麻烦大神门详细解释下,出现上述情况的原因.也就是说haha是从哪里读出来的?难道是方法区?
writeObj()执行完(还没有执行readObj( ),程序未结束)此时是不是还没有生成Person.txt?
readObj()不是从Person.txt读取数据?既然静态不能被序列化,它为什么会读出haha?
import testclass.Person;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
class ObjectStreamDemo{
public static void writeObj()throws IOException{
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("Person.txt"));//创建写入指定 OutputStream 的 ObjectOutputStream。
//此构造方法将序列化流部分写入底层流
oos.writeObject(new Person("zhang",12,"haha"));//将指定的对象写入 ObjectOutputStream
/*
对象的类、类的签名(SerialVersionUID),以及类及其所有父类的非瞬态和非静态字段的值都将被写入
*/
oos.close();
}
public static void readObj()throws IOException,ClassNotFoundException{
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Person.txt"));//创建从指定 InputStream 读取的 ObjectInputStream。
Person p=(Person)ois.readObject();//将读取流中的一个对象返回,当有多个对象可以采用循环读取
//注意该方法上声明两个异常(IOException,ClassNotFoundException)
System.out.println(p.toString());
}
public static void main(String[] args)throws IOException,ClassNotFoundException{
writeObj();
readObj();
}
}
package testclass;
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID=100L;
private String name;
int age;
private static String country="cn";
public Person(String name,int age,String country){
this.name=name;
this.age=age;
this.country=country;//非静态可以访问静态
}
public String toString(){
return name+"..."+age+"..."+country;
}
}
问题就是:结果是 zhang...12...haha但是如果:
先writeObj(),然后readObj()
结果zhang...12...cn
在贴吧有个类似问题:http://bbs.csdn.net/topics/390155251
感觉还是似懂非懂,麻烦大神门详细解释下,出现上述情况的原因.也就是说haha是从哪里读出来的?难道是方法区?
writeObj()执行完(还没有执行readObj( ),程序未结束)此时是不是还没有生成Person.txt?
readObj()不是从Person.txt读取数据?既然静态不能被序列化,它为什么会读出haha?
解决方案 »
- 【求助】关于java输入语句异常的处理
- 怎么设置一个jar文件运行时jvm所占内存大小
- 请问:Java多媒体技术和Java Email技术那些书籍好?有没有给我推荐一下的?还有今年来,Java多媒体技术以及Email技术在国内有市场没呢?应用多么?
- moto外包和支付宝外包那个好?
- java初手请教环境变量的问题
- 帮帮我吧 一个关于TableModelListener的问题
- 我的JBuilder突然不能显示中文了,该怎样处理啊,急啊!!
- 如何将一行数据拆开处理
- EntityBean效率低吗?
- 读写分离配置完成后出现的问题,DynamicDataSourceInterceptor拦截出现以下异常
- 什么按钮事件
- 求一个java方法实现如下的转换
这里本来是cn的,只是默认值,如果实例对象的时候不输入,值就为cn
但是你实例化Person这个对象的时候,这个值就已经被改变成了 你的输入值haha了。
静态变量又不是不能修改。。
writeObj()执行完就已经生成了Person.txt、不信你把readObj( )方法注释掉看看有没有Person.txt文件就知道了。
你可以先把文件删掉,然后把main方法里的readObj()注释掉运行一遍,再把writeObj()注释掉再运行一遍。因为2次运行不是同一个JVM,所以会显示CN。