我试图使用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++; }
readObject()不返回nullEOF。您可以捕获EOFException并将其解释为EOF,但这将无法检测到将正常EOF与已被截断的文件区分开。
readObject()
null
EOFException
更好的方法是使用一些元数据。也就是说,您不必询问ObjectInput流中有多少个对象,而应该将计数存储在某个地方。例如,您可以创建一个元数据类来记录计数和其他元数据,并将实例作为每个文件中的第一个对象存储。或者,您可以创建一个特殊的EOF标记类,然后将实例存储为每个文件中的最后一个对象。
ObjectInput