我正在尝试使用 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()
不会在 EOF 处返回 null
。您可以捕获 EOFException
并将其解释为 EOF,但这将无法检测到将正常 EOF 与已截断的文件区分开来。
更好的方法是使用一些元数据。也就是说,与其询问 ObjectInput
流中有多少对象,不如将计数存储在某处。例如,您可以创建一个记录计数和其他元数据的元数据类,并将一个实例存储为每个文件中的第一个对象。或者您可以创建一个特殊的 EOF 标记类并将一个实例存储为每个文件中的最后一个对象。
关于Java FileInputStream ObjectInputStream 到达文件 EOF 的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2626163/