我必须使用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);

请注意,您可以将响应对象变成一个类,如果那样的话会更容易。

10-07 16:14
查看更多