java - 使用 Java 读取结构化二进制文件的最佳方法

标签 java file binaryfiles

我必须使用 Java 读取旧格式的二进制文件。

简而言之,该文件有一个由多个整数、字节和固定长度字符数组组成的标题,然后是一个记录列表,该列表也由整数和字符组成。

在任何其他语言中,我会创建 structs (C/C++) 或 records (Pascal/Delphi),它们是标题的逐字节表示和记录。然后我将 sizeof(header) 字节读入头变量并对记录执行相同操作。

类似这样的东西:(Delphi)

type
  THeader = record
    Version: Integer;
    Type: Byte;
    BeginOfData: Integer;
    ID: array[0..15] of Char;
  end;

...

procedure ReadData(S: TStream);
var
  Header: THeader;
begin
  S.ReadBuffer(Header, SizeOf(THeader));
  ...
end;

用 Java 做类似事情的最佳方法是什么?我必须自己读取每个值还是有其他方法可以进行这种“ block 读取”?

最佳答案

据我所知,Java 强制您以字节形式读取文件,而不是阻止读取。如果您要序列化 ​​Java 对象,那就另当别论了。

显示的其他示例使用 DataInputStream带有文件的类,但您也可以使用快捷方式:RandomAccessFile类:

RandomAccessFile in = new RandomAccessFile("filename", "r");
int version = in.readInt();
byte type = in.readByte();
int beginOfData = in.readInt();
byte[] tempId;
in.read(tempId, 0, 16);
String id = new String(tempId);

请注意,您可以将响应对象转换为一个类,如果这样会更容易的话。

关于java - 使用 Java 读取结构化二进制文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277944/

相关文章:

java - 无法使用模拟来抛出异常 - 抛出的异常未被捕获

java - 无法正确读取 Milkshape 3D 二进制文件

python read(4) 返回长度为 1 而不是 4 的字符串

c - 如何使用字符串打开二进制文件?使用 C

javascript - 如何访问 MongoDB 中的图像文件并使用 Express.js 将它们发送到客户端

java - 如何在 Spring MVC 中处理 URL 和 @RequestMapping

java - Java类源文件可以从Matlab中引用吗?

android - 在 Android 中使用 NanoHTTPD

java - 链表数组

c - 文件是如何保存的?