Properties类
表示一个持久的属性集;
特点:
特有方法:
序列化流与反序列化流
特点:用于操作对象,可以将对象写入到文件中,也可以从文件中读取对象;
ObjectOutputStream:对象的序列化
资源类:
public class Person implements Serializable {//实现Serializable接口
private String name;
private String age;
public Person(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Person() {
}
}
注意事项:
进行序列化时,需要实现一个标识性接口Serializable;
测试类序列化方法:
public static void med() throws Exception{
FileOutputStream fos=new FileOutputStream("d:\\Java\\person.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
Person p=new Person("小强","20");
oos.writeObject(p);
oos.close();
}
序列化运行结果:文件中文字不是编码问题造成的;
ObjectInputStream:对象的反序列化
测试类反序列化方法:
public static void med1() throws Exception{ //这里为了方便只抛了一个父类异常,详细看下图 FileInputStream fis=new FileInputStream("d:\\Java\\person.txt"); ObjectInputStream ois=new ObjectInputStream(fis); Object o = ois.readObject(); System.out.println(o); ois.close();}
注意事项:
反序列化时,保证类文件.class文件存在,否则抛出ClassNotFoundException异常;
反序列化运行结果
在序列化之后修改源码,会导致反序列化时抛序列号不相同异常;如下:
解决方式:在资源类中添加如下一行
注意:图中选中的部分不可变,前面的修饰符和后面的值都是可以随意修改的;
这样就可以手动绑定序列号,不会造成序列号不同异常;
private static final long serialVersionUID = 42L;
//对类的序列号进行了绑定
如果你不想让资源类中某一个变量序列化;
可使用以下方法:
如图位置:
io流往期: