Java FileInputStream ObjectInputStream 到达文件 EOF 的结尾

标签 java file-io fileinputstream objectinputstream

我正在尝试使用 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/

相关文章:

java - HtmlUnit - 按钮点击问题

java - 需要 Java 库——用于远程(例如 S3)文件的本地文件缓存

c++ - 了解如何读入文件并将文件中的行分隔为不同的变量

file-io - 使用Scheme从文件中读取

java - 运行时优化

java - 使用参数创建不要将新行插入数据库表

java - com/sun/deploy/util/WinRegistry 抛出 ClassNotFoundException Intellij Idea

java - Buffered reader 和 InputStreams 的不同可能嵌套

java - FileInputStream 读取文件的最后 128 个字节

java - DB 查询很快,但 JPARepository 获取很慢