ObjectOutputStream
-
对象序列化,将Java对象保存到文件或网络中进行持久化
-
序列化规则:
- 对象所属的类要实现Serializable接口
- 对象序列化保存对象所属的类信息、属性名称、属性值
- 被transient关键字修饰的属性不会被序列化(保存)
//创建一个序列化的方法 public static void saveObject(){ try { //创建实例化对象 Student s = new Student(201801, "张三", "男", 20); String path = "D:/code/objs.txt"; FileOutputStream fos = new FileOutputStream(path); //使用ObjectOutputStream将低级流包装为高级流 ObjectOutputStream oos = new ObjectOutputStream(fos); //写入 oos.writeObject(s); //关闭 oos.flush(); oos.close(); fos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
ObjectInputStrteam
-
对象反序列化,将存储在文件或网络中的Java对象读取到程序中
//创建一个反序列化的方法 public static void getObject(){ try { FileInputStream fis = new FileInputStream("D:/code/objs.txt"); ObjectInputStream ois = new ObjectInputStream(fis); //读取 Object obj = ois.readObject(); //在控制台打印出来 if(obj instanceof Student ){ Student stu = (Student)obj; System.out.println(stu); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
-
创建主函数调用方法
public static void main(String[] args) { saveObject(); getObject(); }
创建对象
- 创建对象应包含属性、无参构造函数、含参构造函数、SetterGetter方法、toString、实现Serializable接口
- 若对象中包含类属性,当对象被序列化时,类属性也需要实现Serializable接口
- 若被序列化的对象父类实现了Serializable接口,那么子类便可以继承父类的接口可以不必再写
public class Student implements Serializable{
private int uid;
private transient String name; //transient修饰的属性不会被序列化
private String sex;
private int age;
private Course c;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(int uid, String name, String sex, int age) {
super();
this.uid = uid;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [uid=" + uid + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}