我必须使用 Java 读取旧格式的二进制文件。
简而言之,该文件有一个由多个整数、字节和固定长度字符数组组成的标题,然后是一个记录列表,该列表也由整数和字符组成。
在任何其他语言中,我会创建 struct
s (C/C++) 或 record
s (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/