序列化案例
首先创建一个Worker实体类。代码如下:
public class Worker implements Serializable {
private String name;
private double salary;
private List<String> subject;
public Worker(String name, double salary, List<String> subject) {
this.name = name;
this.salary = salary;
this.subject = subject;
}
@Override
public String toString() {
return "Worker{" +
"name='" + name + '\'' +
", salary=" + salary +
", subject=" + subject +
'}';
}
public Worker(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public List<String> getSubject() {
return subject;
}
public void setSubject(List<String> subject) {
this.subject = subject;
}
}
注意:该实体类必须实现serializable接口才能被序列化
下面创建一个工具类用于封装序列化和反序列化方法
public class SerializableUtils {
//反序列化
public static Object getDeserializable(String fileName) throws IOException {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
Object o = null;
try(fis;ois){
o = ois.readObject();
}catch (Exception e){
e.printStackTrace();
}
return o;
}
//序列化
public static void getSerializable(Object obj,String fileName) throws IOException {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
try(fos;oos){
oos.writeObject(obj);
}
}
}
注意:IO流的释放操作参照JDK9版本,其他版本详见try-with-resources
在程序入口,创建对象传入封装的方法中:
public static void main(String[] args) throws IOException {
Vector<String> vector = new Vector<>();
vector.add("线性代数");
vector.add("微机接口");
vector.add("马克思主义");
Worker w1 = new Worker("刘大", 15000, vector);
SerializableUtils.getSerializable(w1,"D:\\临时文件夹\\测试\\新建文件夹\\worker.txt");
Object o = SerializableUtils.getDeserializable("D:\\临时文件夹\\测试\\新建文件夹\\worker.txt");
System.out.println(o);
}
浙公网安备 33010602011771号