java的序列化

来源:互联网 发布:魔兽争霸 知乎 编辑:程序博客网 时间:2024/04/30 06:44

如果要让类能够被序列化,就实现Serializable接口。

简单例子:

public class Dog implements Serializable{
//如果某实例变量不能或不应该被序列化,就把它标记为transient的。当通过被还原序列化的类得到它时,其值会为null。当去掉该标记得到的name还是原来的。
 transient String name;


public Dog(String name) {
super();
this.name = name;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


}

public class Test1 {
public static void main(String[] args) {
try {
FileOutputStream fileOutputStream=new FileOutputStream("game.ser");
ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(new Dog("lele"));
System.out.println("写入成功");
FileInputStream fileInputStream=new FileInputStream("game.ser");
ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
Dog dog=(Dog) objectInputStream.readObject();
System.out.println("读取结果:");
System.out.println("dog name is"+dog.getName());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

对象的序列化:

1.你可以通过序列化来存储对象的状态。

2.使用ObjectOutputStream来序列化对象

3.用fileoutputstream链接objectoutputStream来将对象序列化到文件上。

4.对象必须实现序列化接口才能被序列化。如果付烈实现了序列化,则子类也就自动地有实现,而不管是否有明确的声明。

5.除非该实例变量被标记为transient否则,该变量被还原的时候会被赋予为null或primitive住数据类型的默认值。

6.读取对象的顺序必须与写入对象的顺序相同。

7.静态变量不会被实例化。因为所有的对象都是哦你共享同一份静态变量值。

原创粉丝点击