io-序列化ObjectOutputStream-反序列化ObjectInpputStream-关键字transient
关键字transient : 表示游离,如果实例化对象里面的某个字段不参加序列化,需要在该字段前面加上该关键字
序列化一个:users 实例对象:
1、实例化对象必须 实现接口: Serializable;
2、提供无参数构造方法,有参数构造方法,重写toString方法
import java.io.Serializable; public class User implements Serializable { private int no; // transient关键字表示游离的,不参与序列化。 private transient String name; // name不参与序列化操作! public User() { } public User(int no, String name) { this.no = no; this.name = name; } @Override public String toString() { return "User{" + "no=" + no + ", name='" + name + '\'' + '}'; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
序列化ObjectOutputStream:
一次序列化多个对象:
1、创建一个List集合(实现序列化接口)
2、给集合泛型里面一个users对象
3、参与序列化的ArrayList集合以及集合中的元素User都需要实现 java.io.Serializable接口。
import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /* 一次序列化多个对象,可以将对象放到集合当中,序列化集合。 提示: 参与序列化的ArrayList集合以及集合中的元素User都需要实现 java.io.Serializable接口。 */ public class ObjectOutputStreamTest { public static void main(String[] args) throws Exception{ List<User> userList = new ArrayList<>(); userList.add(new User(1,"zhangsan")); userList.add(new User(2, "lisi")); userList.add(new User(3, "wangwu")); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("users")); // 序列化一个集合,这个集合对象中放了很多其他对象。 oos.writeObject(userList); oos.flush(); oos.close(); } }
反序列化ObjectInpputStream
/* 反序列化集合 */ public class ObjectInputStreamTest{ public static void main(String[] args) throws Exception{ ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users"));
//Object obj = ois.readObject();
//向下转型判断:测试一下该集合是否为user对象; 输出测试 :true //System.out.println(obj instanceof List);
List<User> userList = (List<User>)ois.readObject(); for(User user : userList){ System.out.println(user); }
//关闭资源 ois.close(); } }