我必须使用Java读取旧格式的二进制文件。
简而言之,该文件的 header 由几个整数,字节和固定长度的char数组组成,后跟同样由整数和char组成的记录列表。
我可以用其他任何语言创建struct
s(C/C++)或record
s(Pascal/Delphi),它们是标题和记录的逐字节表示。然后,我将sizeof(header)
字节读入 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执行类似操作的最佳方法是什么?我是否必须自己读取每个值,或者是否有其他方法可以进行这种“块读取”?
最佳答案
据我所知,Java迫使您以字节为单位读取文件,而不是阻止读取。如果要序列化Java对象,那就大不一样了。
显示的其他示例将DataInputStream类与File一起使用,但您也可以使用快捷方式: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);
请注意,您可以将响应对象变成一个类,如果那样的话会更容易。