【问题标题】:How do i read in binary data files in java我如何在java中读取二进制数据文件
【发布时间】:2016-04-15 17:01:50
【问题描述】:

所以我正在为学校做一个项目,我需要读取二进制数据文件并使用它来为角色制作统计数据,例如力量和智慧。它被设置成前 8 位构成一个统计数据。

我想知道执行此操作的实际语法是什么。是不是像读文本文件,像这样。

File file = new File("CharacterStats.dat");
Scanner inputScanner = new Scanner(file);

inputScanner.next();

【问题讨论】:

    标签: java binary fileinputstream


    【解决方案1】:

    如果您使用的是 JDK 7+,最简单的方法是:

    Path path = Paths.get("CharacterStats.dat");
    byte[] fileContents =  Files.readAllBytes(path);
    

    然后随心所欲地使用该数组。

    由于一个字节包含 8 位,您可以通过 fileContents[0] 访问前 8 位,然后可能使用 bitwise operations 控制程序的流程。

    【讨论】:

      【解决方案2】:

      你可以使用类似这样的东西来代替扫描器:

      File file = new File("CharacterStats.dat");
      FileInputStream fis = new FileInputStream(file);
      ObjectInputStream ois = new ObjectInputStream(fis);
      YourClass object = (YourClass) ois.readObject();
      

      第三行您从流中创建一个新对象,并将其转换为您想要的对象。您必须这样做,因为 java 无法知道正在读取什么对象。

      编辑:这是为了将二进制数据作为序列化对象读取。我可能将您的问题误解为您的“统计数据”是对象。

      【讨论】:

      • 谢谢。但是现在我如何访问所有的 1 和 0 来使用它们。抱歉,我真的只有阅读文本文件的经验。
      • 你没有。这就是 ObjectInputStream 的“readObject()”方法为您所做的。它将文本文件中的二进制文件解释为 java 对象。然而,你需要告诉编译器它到底是什么种类的Object,你可以通过强制转换来做到这一点。
      • 所以如果我将它转换为 int 它会自动将 010010 转换为 18?很抱歉问了这么多问题,你帮了大忙。
      猜你喜欢
      • 2018-01-16
      • 2012-07-08
      • 2013-09-26
      • 1970-01-01
      • 2015-07-27
      • 2015-02-05
      • 1970-01-01
      • 2021-09-08
      相关资源
      最近更新 更多