【问题标题】:Reading serialized objects from a binary file in java?从java中的二进制文件中读取序列化对象?
【发布时间】:2015-11-25 18:27:23
【问题描述】:

我有一个简单的问题。

如何在java中读取二进制文件的所有内容?

我写了一些代码,但它只检索第一个对象。

这是我的代码:

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\Users\\فاطمة\\Downloads\\student.bin"));
    Binary b2 = (Binary)in.readObject();
    System.out.println("Student ID: " + b2.id);
    System.out.println("Student Name: " + b2.name);
    System.out.println("Student Grade: " + b2.grade);
    in.close();

【问题讨论】:

  • 是否有多个对象?如果有,那么您可能希望像这样反序列化为ListList<Binary> binaries = (List)in.readObject();。如果对象不是某种形式的列表,则文件中只存在一个对象
  • 你应该编辑你的标题,说明你正在读取序列化对象而不是任何二进制数据
  • 复制和粘贴中间 4 行的次数与文件中的用户数一样多。或者,更严重的是,使用循环。
  • 如何循环进入二进制文件???
  • 你知道文件中有多少用户吗?如果是这样,请使用for (int i = 0; i < numberOfUsers; i++)。如果不这样做,则使用无限循环,并在 readObject() 抛出 IOException 时立即中断,因为已到达流的末尾。但在这种情况下,正如 malinator 建议的那样,保存/加载单个 List 可能是一个更好的主意。

标签: java file-io binaryfiles


【解决方案1】:

正如 malinator 所提到的,将序列化对象连接到一个文件中是不好的做法,它们应该包含在一个集合中。

如果您无权访问生成文件的代码,可能有两种情况:

  • 要么您知道对象的数量,然后您就可以进行正确数量的ObjectInputStream.readObject() 调用,最好使用for 循环
  • 或者您不这样做,那么问题在于检测到文件的结尾。您可以使用while 循环加上try/catch(EOFException)

【讨论】:

  • 应该是catch (EOFException),这不是坏习惯,这就是API设计的使用方式。
  • 我当然确定。这就是EOFException 的作用。 表示文件结束。文件结束。
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 2013-05-10
  • 2014-03-26
  • 1970-01-01
相关资源
最近更新 更多