【问题标题】:fRead of C in JavafRead C in Java
【发布时间】:2021-01-14 23:36:49
【问题描述】:

我目前正在做一个我必须制作 MIPS 模拟器的工作,
我已经用 C 完成了这个项目,但现在我必须用 Java 做,以及如何使用二进制文件作为输入,在 C 中有一个函数返回一个值,让我知道文件是否有效。 函数是:fread(&memoTextSize, sizeof(int), 1, arch);
我需要做一些事情来做上面的事情,但是在 Java 中。
如果有人可以帮助我,我将不胜感激。
谢谢!

【问题讨论】:

  • 要从二进制文件中读取,请使用java.io.FileInputStream。见Java Tutorial: I/O

标签: java c fread


【解决方案1】:

您可能会想要使用 BufferedInputStream。这是一个例子:

import java.io.*;

class TestBinaryFileReading {

  static public void main(String[] args) throws IOException {  
    DataInputStream data_in = new DataInputStream(
        new BufferedInputStream(
            new FileInputStream(new File("binary_file.dat"))));
    while(true) {
      try {
        int t = data_in.readInt();//read 4 bytes

        System.out.printf("%08X ",t); 

        // change endianness "manually":
        t = (0x000000ff & (t>>24)) | 
            (0x0000ff00 & (t>> 8)) | 
            (0x00ff0000 & (t<< 8)) | 
            (0xff000000 & (t<<24));
        System.out.printf("%08X",t); 
        System.out.println();
      } 
      catch (java.io.EOFException eof) {
        break;
      }
    } 
    data_in.close();
  }
}

来自How to read binary file created by C/Matlab using JAVA

【讨论】:

    【解决方案2】:

    替代方案:

    ByteBuffer byteBuffer = ByteBuffer.wrap(Files.readAllBytes(Paths.get(path)));
    byteBuffer = byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    int size = byteBuffer.asIntBuffer().get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2018-02-20
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多