当前位置: 首页 > 面试题库 >

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

朱鸿畅
2023-03-14
问题内容

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

简而言之,该文件的标头由几个整数,字节和固定长度的char数组组成,后跟同样由整数和char组成的记录列表。

我可以用任何其他语言创建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做类似的事情的最佳方法是什么?我是否必须自己读取每个值,或者是否有其他方法可以进行这种“块读取”?


问题答案:

据我所知,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);

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



 类似资料:
  • 问题内容: 我有一个较长的无符号整数文件(每个64位,0.47GB文件),需要读取并存储在数组中。经过一番思考之后,由于Java中的所有内容都已签名(请纠正我,请纠正我),因此我长时间使用了该类型,我想不出更好的选择了。无论如何,仅需对数组进行排序,因此原始数字的精确值并不是最重要的。我们应该测量排序算法的效率,仅此而已。但是,当我实际要读取文件时(在下面的代码中),我遇到了砖墙。 它会一直持续下

  • 问题内容: 我在嵌入式Linux设备上使用Java 1.5,并且希望读取具有2MB int值的二进制文件。(现在是4字节的Big Endian,但我可以决定格式) 使用via 使用),这500 000个调用需要17秒才能读取,但是读入一个大字节缓冲区的文件需要5秒。 我如何更快地将该文件读入一个巨大的int []? 读取过程不应使用额外的512 kb。 下面使用的这段代码并不比java io中的r

  • 问题内容: 我发现用Python读取二进制文件特别困难。你能帮我个忙吗?我需要读取此文件,在Fortran 90中,该文件很容易被读取 详细而言,文件格式为: 如何使用Python阅读?我尝试了一切,但没有成功。我是否有可能在python中使用f90程序,读取此二进制文件,然后保存需要使用的数据? 问题答案: 读取二进制文件内容,如下所示: 然后使用struct.unpack “解压缩”二进制数据

  • 问题内容: 从其他一些应用程序中,我正在获取XML文件。 我想逐个节点读取该XML文件,并将节点值存储在数据库中以备将来使用。 那么,使用Java读取XML文件和检索节点值的最佳方法/ API是什么? 问题答案: dom4j和jdom非常易于使用(暂时忽略“最佳”需求;))

  • 本文向大家介绍C#读取二进制文件方法分析,包括了C#读取二进制文件方法分析的使用技巧和注意事项,需要的朋友参考一下 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧还有大量的文件格式不是XML,甚至也不是ASCII。二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递。相比之下,在处理

  • 问题内容: 我在C#.net中有一个程序,它使用写入1个整数和3个字符串到文件中。 现在,我正在用Java编程(对于Android,这是Java的新手),我必须访问以前使用C#写入文件的数据。 我尝试使用和,但无法获得正确的结果。我通常会得到: java.io.UTFDataFormatException:字节21附近的输入格式错误 或者和我得到的是错误的… 这样做的正确方法是什么? 问题答案: