当前位置: 首页 > 面试题库 >

Java FileInputStream ObjectInputStream到达文件EOF的结尾

林鹏鹍
2023-03-14
问题内容

我试图使用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与已被截断的文件区分开。

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



 类似资料:
  • 我正在设计一个程序,为消息中的特定字符保存索引位置。然后,我需要根据这些字符的索引位置来检索它们。我将这些字符的位置保存在。txt文件中。我检索了它们,但在最后,我得到了这样一条消息“Exception in thread”AWT-EventQueue-0“java.lang.IndexoutOfBoundsException:Index 120 out of bounded for length

  • eof

    描述 (Description) 如果FILEHANDLE上的下一次读取将返回文件结尾,或者如果FILEHANDLE未打开,则此函数返回1。 没有参数的eof使用最后读取的文件。 使用带空括号的eof()是非常不同的。 它指的是由命令行中列出的文件形成的伪文件,可通过<>运算符访问。 语法 (Syntax) 以下是此函数的简单语法 - eof FILEHANDLE eof() eof 返回值 (

  • 我想要到达我的本地主文件夹。例如: 这是位置。 我必须到达“文件夹1” 当我使用dirname()时,似乎这个路径。 我怎样才能到达“Folder1”? ps:如果路径是我必须再次到达“folder1” 如果你帮助我,我会很高兴。谢谢

  • 我有一个生成PDF文件的webapp。我为此使用fop 2.1,但有些字符不是默认的fop字体。我尝试使用其他字体,以正确打印所有字符。 如果我在我的PC上执行的测试类中尝试它,一切都很好。但是如果应用程序试图在weblogic服务器上做同样的事情,我会收到:Java . io . EOF exception:Reached EOF,file size = 23275952 offset = 23

  • 我得到以下错误,当我运行。 EOFError:压缩文件在到达流结束标记之前结束 即使当我手动提取文件并将其放置在目录中时,程序仍在尝试下载文件,而不是使用提取的文件。 当我使用手动方式WinZip提取文件时,WinZip告诉我该文件已损坏。 我如何解决这个问题? 我现在甚至不能加载数据集,我仍然需要调试程序本身。请帮忙。 我安装了Tensorflow,因此没有Tensorflow示例。所以我去Gi

  • 问题内容: 我一直很难在由vagrant提供支持的虚拟机中执行简单的golang程序。这些是我的相关领域: 这是我要执行的程序(位于/ usr / local / src / go / program中): 这,我得到的输出: 考虑到这是一个完全伪造的程序。奇怪的是,它完全可以在不同的环境中工作。我在这里想念什么? 非常感谢! 问题答案: 问题既不是也不是。go安装有时会失败,使整个过程变得不稳定