首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Java读取结构化二进制文件的最佳方法

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

Stack Overflow用户
提问于 2008-11-10 14:11:12
回答 12查看 72.9K关注 0票数 52

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

简而言之,该文件有一个由几个整数、字节和固定长度的字符数组组成的头部,后面是一个记录列表,该列表也由整数和字符组成。

在任何其他语言中,我都会创建struct (C/C++)或record (Pascal/Delphi),它们是报头和记录的逐字节表示。然后,我将sizeof(header)字节读入头变量,并对记录执行相同的操作。

如下所示:(Delphi)

代码语言:javascript
复制
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做类似的事情最好的方法是什么?我是否必须自己读取每个值,或者是否有其他方法来执行这种“块读取”?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-11-10 14:41:08

据我所知,Java强制您以字节的形式读取文件,而不是能够进行块读取。如果是序列化Java对象,情况就不同了。

显示的其他示例使用带有文件的DataInputStream类,但您也可以使用快捷方式:RandomAccessFile类:

代码语言:javascript
复制
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);

请注意,您可以将响应对象转换为一个类,如果这样做会更容易的话。

票数 36
EN

Stack Overflow用户

发布于 2009-08-12 14:52:04

如果您使用的是Preon,那么您所要做的就是:

代码语言:javascript
复制
public class Header {
    @BoundNumber int version;
    @BoundNumber byte type;
    @BoundNumber int beginOfData;
    @BoundString(size="15") String id;
}

一旦有了这些,您就可以使用一行代码来创建Codec:

代码语言:javascript
复制
Codec<Header> codec = Codecs.create(Header.class);

您可以像这样使用编解码器:

代码语言:javascript
复制
Header header = Codecs.decode(codec, file);
票数 20
EN

Stack Overflow用户

发布于 2008-11-10 14:31:32

您可以按如下方式使用DataInputStream类:

代码语言:javascript
复制
DataInputStream in = new DataInputStream(new BufferedInputStream(
                         new FileInputStream("filename")));
int x = in.readInt();
double y = in.readDouble();

etc.

一旦你得到了这些值,你就可以随心所欲地处理它们。查看API中的java.io.DataInputStream类以获取更多信息。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/277944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档