学习随笔(1)ObjectInputStream与ObjectOutputStream装饰器

来源:互联网 发布:虚拟机网络不可用 编辑:程序博客网 时间:2024/06/05 08:11

ObjectInputStream与ObjectOutputStream可以将内存中的对象整个存储下来,之后再读入还原为对象,在一定程度上解决了突然停电时的数据丢失的问题,通过将对象保存到磁盘中,使得对象的执行情况也被保存了下来,可以使程序的使用更加的便利。

ObjectInputStream提供了readObject()方法来读入对象,ObjectOutputStream提供了writeObject()方法来还原对象,输出到目的地。同时作为打包器ObjectInputStream与ObjectOutputStream需要配合FileInputStream和FileOutputStream一起使用,发挥作用。另外,被这俩个方法处理的对象必须操作java.io.Serializable接口,作为标识之用,表示这个对象是可以串行化的。(Serializable)

下面是实现的相关代码

(1)第一个类

import java.io.*;


public class Member2 implements Serializable {                 //定义了Member2类,用于存储会员的三个信息
/**

*/
// private static final long serialVersionUID = 1L;
private String name;
private String number;
private int age;


public Member2(String name,String number,int age){
this.name = name;
this.number = number;
this.age = age;
}


@Override
public String toString(){                                                                 //toString()函数的重载,输出格式化
return String.format("(%s , %s , %d )", name,number,age);
}
 
public void save() throws IOException{                                          //创建输出流,将文件写入程序中进行打包
    try(ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(name))){
    output.writeObject(this);                                                                 //调用writeObject()方法
    }
}


public static Member2 load(String name) throws IOException,ClassNotFoundException{                      //创建输出流
Member2 member;
try(ObjectInputStream input = new ObjectInputStream(new FileInputStream(name))){
member = (Member2) input.readObject();                                                                                   //调用readObject()方法
}
return member;
}
}

(2)第二个类,对于定义的方法的实现

import java.io.*;
import static java.lang.System.*;


public class Member2Demo {
public static void main(String[] args) throws Exception{
Member2[] member = {                                                                  //创建Member2实例并且进行初始化
new Member2("yanpei","1234",22),
new Member2("yanjie","5657",33)
};
for(Member2 members:member){                                                    //加强版for循环进行写入
members.save();
}
out.println(Member2.load("yanpei"));                                               //输出
out.println(Member2.load("yanjie"));
}
}


                                       初学者的学习笔记,部分参考林信良的《java学习笔记》,

阅读全文
0 0
原创粉丝点击