【发布时间】:2013-10-27 15:15:02
【问题描述】:
我有一个包含 Delphi 记录的二进制文件。 记录如下:
TRMapFileHeader = record
FileType: String[8];
Points: Int64;
Objects: Int64;
Text: Int64;
ObjLayers: byte;
TextLayers: byte;
end;
我想用 Java 读取这个文件。我打开了文件:
DataInputStream file = new DataInputStream(new FileInputStream(filename))
然后我尝试读取数据:
for(int i = 0; i<8; i++)
System.out.print((char)file.readByte());
System.out.println();
System.out.println(file.readLong());
System.out.println(file.readLong());
System.out.println(file.readLong());
System.out.println(file.readByte());
System.out.println(file.readByte());
我有
而不是正确的数据:
RMF
441434
80457
14186
11
4
我玩了不同的阅读方式,发现了下一个:
System.out.println(file.readByte());
for(int i = 0; i<3; i++)
System.out.print((char)file.readByte());
for(int i = 0; i<36; i++)
file.readByte();
System.out.println();
System.out.println(file.readByte());
System.out.println(file.readByte());
所以我想知道如何阅读这种记录
【问题讨论】:
-
考虑在 Delphi 中使用打包记录,这样您就不必处理对齐问题。
-
为什么要使用打包记录?如果您在其他地方重复使用记录,这将导致其他地方损坏。
-
@MarcusAdams 嗯,不确定。使用记录来二进制 blit 数据是如此 1970 年代!例如,如今 BinaryWriter/BinaryReader 会更有意义。打包记录只会让性能很差。
-
我想知道为什么不直接使用任何十六进制编辑器/查看器并使用试验和错误来解析文件,然后在 java 中重新创建解析
-
@Arioch'The 好吧,我想如果您无法从第一原则中解决问题,您可能会采取反复试验。但是你怎么能确定你做对了。如果您掷硬币得到 H,T,H,T,H,T,您可能会得出结论,掷硬币会产生交替序列。
标签: java file delphi structure record