一尘不染

Java FileInputStream ObjectInputStream到达文件EOF的结尾

java

我试图使用readObject读取二进制文件中的行数,但得到IOException EOF。我这样做正确吗?

    FileInputStream istream = new FileInputStream(fileName);
    ObjectInputStream ois = new ObjectInputStream(istream);

    /** calculate number of items **/
    int line_count = 0;
    while( (String)ois.readObject() != null){            
        line_count++;
    }

阅读 460

收藏
2020-09-08

共1个答案

一尘不染

readObject()不返回nullEOF。您可以捕获EOFException并将其解释为EOF,但这将无法检测到将正常EOF与已被截断的文件区分开。

更好的方法是使用一些元数据。也就是说,您不必询问ObjectInput流中有多少个对象,而应该将计数存储在某个地方。例如,您可以创建一个元数据类来记录计数和其他元数据,并将实例作为每个文件中的第一个对象存储。或者,您可以创建一个特殊的EOF标记类,然后将实例存储为每个文件中的最后一个对象。

2020-09-08