简介
ObjectOutputStream用于对象的写入到具体的输出流中,ObjectInputStream用于从具体的输入流中读取
ObjectInputStream
我们先看看官方JDK对该对象的部分介绍
我从中大致提取几个要点:
1.该类可以将之前利用ObjectInputStream写入的对象和原始数据进行解序列化
2.该流需要确定的提取出来的对象必须要能够匹配目前存在于虚拟机中的类,换言之就是,类如何改变了就不能匹配了
然后再看看构造函数
这里有两个,第一个仅仅是为了提供给子类,意思就是父类的私有数据不必再次分配
第二个才是我们作为初学者最需要关注的,我们需要提供一个输入流给该构造函数
最后我们关注一下特殊的方法
该方法就是我们读取输入流中的对象
ObjectOutputStream
JDK简介
1.该类能够为输出流写入对象和图形
2.只有被序列化的对象才能够写入
看看构造函数
传一个输入流
看看特殊方法
案例
写入三个对象到文本中
public class Person implements Serializable{//序列化
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString() {
return name+":"+age;
}
}
public class IOMain {
public static void main(String[] args) throws Exception{
ObjectWrite();
ObjectRead();
}
public static void ObjectRead() throws Exception{
File obj_f=new File("C:\\Users\\Administrator\\Desktop\\IO\\Object.txt");
if(!obj_f.exists())
{
obj_f.createNewFile();
}
FileInputStream objfis=new FileInputStream(obj_f);
ObjectInputStream ois=new ObjectInputStream(objfis);
Person p=null;
while((p=(Person)ois.readObject())!=null)
{
sop(p);
}
ois.close();
}
public static void ObjectWrite() throws Exception {
File obj_f=new File("C:\\Users\\Administrator\\Desktop\\IO\\Object.txt");
if(!obj_f.exists())
{
obj_f.createNewFile();
}
FileOutputStream fos=new FileOutputStream(obj_f);
ObjectOutputStream oos =new ObjectOutputStream(fos);
//写入对象
oos.writeObject(new Person("lisi0",39));
oos.writeObject(new Person("lisi1",39));
oos.writeObject(new Person("lisi2",39));
oos.writeObject(null);//需要传入一个null,以防报错
oos.close();
}
public static void sop(Object o)
{
System.out.println(o);
}
}
总结
在我的所有的博客中,对于输入输出流的基本操作都是类似的,他们,只是对于不同的对象有着不同的方法,InputStream读入数据,OutputStream写出数据,输出流都要记得刷新,最后两者都要记得关闭