特殊流:对象流
对象序列化
把对象存储到文件中,并且可以进行反序列化操作,对象的文件读写
ObjectInputStream
ObjectOutputStream
注意:要实现对象序列化,必须让对象实现Serializable接口
否则会抛出异常
以下是对象的读写演示
class test implements Serializable
{
public String name;
public int age;
public test()
{
name="匿名";
age=0;
}
public test(String name,int age)
{
this.name=name;
this.age=age;
}
}
// 对象流
public class test1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 读取文件
FileOutputStream fos=new FileOutputStream("ObjectTest");
// 创建对象流
ObjectOutputStream oos=new ObjectOutputStream(fos);
// 创建对象
test t1=new test();
test t2=new test("张三",100);
// 将对象写入文件
oos.writeObject(t1);
oos.writeObject(t2);
oos.close();
fos.close();
// 读取文件
FileInputStream fis=new FileInputStream("ObjectTest");
// 创建对象流
ObjectInputStream ois=new ObjectInputStream(fis);
// 从文件中读取到object对象流
Object o1 = ois.readObject();
System.out.println(((test)o1).age+" "+((test)o1).name);
o1 = ois.readObject();
System.out.println(((test)o1).age+" "+((test)o1).name);
fis.close();
ois.close();
}
}
使用transient修饰的成员变量,将不参与序列化,也就是说存储的类中剔除了这条属性
如果文件不是单存储了对象,而有其他杂物,再次读取会出现异常
为了避免该异常,我们需要给序列化的类加入对象(42L可修改);
以ID号来标识对象,这样就不会混了
private static final long serialVersionUlD =42L;
Properties集合
就是
把对象存入集合,集合写入文件
从文件读取对象,对象存入集合
Properties作为一个中间件
文件<——>集合<——>内存
public class test1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Properties prop=new Properties();
prop.setProperty("test1","Value1");
prop.setProperty("test2","Value2");
prop.setProperty("test3","Value3");
FileWriter fw=new FileWriter("ObjectTest.txt");
prop.store(fw,null);
fw.close();
FileReader fr=new FileReader("ObjectTest.txt");
prop.load(fr);
fr.close();
System.out.println(prop);
}
}