1、代码:- /*
- 对象序列化:
- */
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- class ObjectStreamDemo
- {
- public static void main(String[] args) throws Exception
- {
- writeObj();
- readObj(); <font color="#ff8c00">
- <b>//</b></font><font color="#ff8c00"><b>问题就出现在这两个方法的调用上面</b></font>
-
- }
- //反序列化
- public static void readObj() throws Exception
- {
- ObjectInputStream ois=new ObjectInputStream
- (new FileInputStream("obj.txt"));
- Person p=(Person)ois.readObject();
- System.out.println(p);
- ois.close();
- }
- //序列化
- public static void writeObj() throws IOException
- {
- ObjectOutputStream oos=new ObjectOutputStream
- (new FileOutputStream("obj.txt"));
-
- //注意这个地方country字段的值"china" 不会被序列化到obj.txt
- oos.writeObject(new Person("zsw",22,"china"));
- oos.close();
- }
- }
复制代码- /*
- 标记接口:
- Serializable
- 可序列化的成员:
- ①堆里面非静态的字段可以被序列化,
- ②方法区里面的静态成员不能被序列化
- ③用关键字transient 修饰的不能被序列化
- */
- import java.io.*;
- class Person implements Serializable
- {
- public static final long serialVersionUID = 42L;
- private String name;
- private int age;
-
- //静态字段不会被序列化
- private 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;
- }
- }
复制代码 2、看main方法里面那两个方法的调用:
1)①先注释掉ReadObj(),只调用 writeObj(); 方法,②然后注释掉 writeObj(); 只调用readObj()方法
结果是:zsw:22:cn
——>
2) 把两个方法的注释都去掉,一次直接调用,发现结果变成 :zsw:22:china
——>
这是怎么回事,结果变成了 china???
我晕,本来以为反正是先调用writeObj,在调用readObj,一次运行应该没问题,一运行,就惊奇的发现变成china了。
|