Java没有从文件中读取所有对象

Java没有从文件中读取所有对象,java,object,arraylist,Java,Object,Arraylist,所以我有一个非常奇怪的错误,我把我的对象放到一个arraylist中,写出来看看是否所有的东西都在那里,所有的东西都检查出来,我把它们写进一个文件,当我打开文件的时候,所有的东西都在那里,但是当我继续读它们的时候,一些对象由于未知的原因没有被读取,就像文件中没有条目一样,但我可以从文件中看到他们在那里。有人知道我失踪了吗 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExceptio

所以我有一个非常奇怪的错误,我把我的对象放到一个arraylist中,写出来看看是否所有的东西都在那里,所有的东西都检查出来,我把它们写进一个文件,当我打开文件的时候,所有的东西都在那里,但是当我继续读它们的时候,一些对象由于未知的原因没有被读取,就像文件中没有条目一样,但我可以从文件中看到他们在那里。有人知道我失踪了吗

import java.io.File;
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.util.ArrayList;

public class ReadWriteTD {

    public static void write(ArrayList<Tokendata> list) {
        try {
            FileOutputStream f = new FileOutputStream(new File("src/resources/TokenProfiles"));
            ObjectOutputStream o = new ObjectOutputStream(f);

            // Write objects to file

            list.forEach(a -> {
                try {
                    o.writeObject(a);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            });


            o.close();
            f.close();



        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        } catch (IOException e) {
            System.out.println("Error initializing stream");
        }

    }


    public static ArrayList<Tokendata> read() {
        ArrayList<Tokendata> list = new ArrayList<Tokendata>();

        try {

            FileInputStream fi = new FileInputStream(new File("src/resources/TokenProfiles"));
            ObjectInputStream oi = new ObjectInputStream(fi);           

            Boolean cond = true;
            while(cond){
                if(oi.readObject() != null) 
                    list.add((Tokendata) oi.readObject());
                else cond=false;
            }

            oi.close();
            fi.close();

    }catch(Exception e){

    }
    //list.forEach(a -> System.out.print(a.toString()));
        return list;

    }

}   
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.ArrayList;
公共类ReadWriteTD{
公共静态无效写入(ArrayList列表){
试一试{
FileOutputStream f=新的FileOutputStream(新文件(“src/resources/TokenProfiles”);
ObjectOutputStream o=新的ObjectOutputStream(f);
//将对象写入文件
列表。forEach(a->{
试一试{
o、 书面对象(a);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
});
o、 close();
f、 close();
}catch(filenotfounde异常){
System.out.println(“未找到文件”);
}捕获(IOE异常){
System.out.println(“初始化流时出错”);
}
}
公共静态ArrayList read(){
ArrayList=新建ArrayList();
试一试{
FileInputStream fi=新的FileInputStream(新文件(“src/resources/TokenProfiles”);
ObjectInputStream oi=新ObjectInputStream(fi);
布尔cond=true;
while(cond){
if(oi.readObject()!=null)
添加((令牌数据)oi.readObject());
else cond=假;
}
oi.close();
fi.close();
}捕获(例外e){
}
//list.forEach(a->System.out.print(a.toString());
退货清单;
}
}   
这就是问题所在:

if(oi.readObject() != null)
   list.add((Tokendata) oi.readObject());
这就是每次迭代调用
readObject()
两次。第一次调用的结果将被忽略,而不是检查它是否为null。你只需要像这样的东西:

Object obj;
while ((obj = oi.readObject()) != null) {
    list.add((Tokendata) obj);
}
不需要使用
cond
变量,现在每次迭代只调用
readObject
一次