本帖最后由 wangpan 于 2013-5-29 20:41 编辑
FileInputStream和FileOutputSream操作对象时,对象中有静态成员的一个例子。
下面是一个Person类:- package fighting;
- import java.io.Serializable;
- public class Person implements Serializable{
- //给person类提供一个固定的标识UID,新的类还能操作曾经被序列化的对象
- public static final long serialVersionUID = 42L;
- private String name;
- transient int age;//加了transient关键字,age将不能被序列化,保证其值在堆内存中存在,而不在文本文件中存在
- static String country = "cn";
- Person(String name,int age,String country){
- this.name= name;
- this.age=age;
- this.country=country;
- }
- public String toString(){
- return name+":"+age+":"+country;
- }
- }
复制代码 下面是我的ObjectDemo类,这个类是要使用上面的Person类的。- package fighting;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- public class ObjectStream {
- public static void main(String[] args) throws IOException, ClassNotFoundException {
- writeObjec();
- readObject();
- }
- public static void readObject() throws IOException, ClassNotFoundException{
- FileInputStream fis = new FileInputStream("src/info.txt");
- ObjectInputStream ois=new ObjectInputStream(fis);
- Person p = (Person)ois.readObject();
- System.out.println(p);
- ois.close();
- }
- public static void writeObjec() throws IOException{
- FileOutputStream fos = new FileOutputStream("src/info.txt");
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- Person person = new Person("wangpan",10,"en");
- oos.writeObject(person);
- oos.close();
- }
- }
复制代码 我在main()方法里只有两行代码,现在的结果是这样的:
1, writeObjec();
//readObject();
在执行 writeObjec();的时候,把第二行的readObject();注释掉,运行一次。然后,
//writeObjec();
readObject();
像上面这样,把writeObjec();注释掉,只运行readObject();
这样的结果为:wangpan:0:cn
2,writeObjec();
readObject();
上面这两句,都不注释掉,同时执行,结果却不同:wangpan:0:en
大家想想,这是为什么呢?
|