先牢骚一下,这个破问题困扰了我太久了…唉。。。。其实很简单
先举一个例子吧。。。序列化两个对象,写入文件,然后再读出来
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- public class ObjectStream {
- public static void main(String[] args) {
- ObjectOutputStream oos = null;
- ObjectInputStream ois = null;
- Person pe = null;
- try {
- FileOutputStream out = new FileOutputStream("D:/obj.txt");
- oos = new ObjectOutputStream(out);
- Person per = new Person("微软", 14);
- pe = new Person("金山", 20);
- oos.writeObject(per);
- oos.writeObject(pe);
- oos.writeObject(null);//解决EOF的关键,加入一个空的对象
- System.out.println("添加成功");
- oos.close();
- out.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try{
- FileInputStream in = new FileInputStream("D:/obj.txt");
- ois = new ObjectInputStream(in);
- Object obj=null;
- while((obj=ois.readObject())!=null) {
- Person s = (Person)obj;
- System.out.println(s);
- }
- ois.close();
- in.close();
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
- }
- class Person implements Serializable {
- private String name;
- private /*transient*/ int age;
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public String getNmae(){
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String toString() {
- return "姓名:" + name + " 性别:" + age;
- }
- }
大家看第21行,在这里追加了一个空对象,因为在第35行的循环中,正确读取了两个对象之后,还会在读一次,此时已经没有东西可读,就会抛出EOF错误,判断条件是不等于空,那我们自己就在文件的后面追加一个空对象不就解决了?
- -