用java读取二进制文件时,怎么样?

时间:2013-05-30 16:06:06

标签: java parsing search hex

如果您想要从正在使用缓冲区读入的文件中找到某些十六进制值,并最终将一段代码解析为输出文件,那么执行此操作的最佳方法是什么?我不是在寻找示例代码。

这是一个非常大的文件,需要多个解析。我应该把它全部读成阵列吗?什么样的阵列?这将取决于搜索我正在寻找的十六进制值的最佳方式,我不确定如何在java中搜索十六进制值。

你会怎么做?

编辑:完整的事件序列。

“抱歉,我想这会让人感到困惑。完整的解释。我会一直搜索标记字节模式。找到它。然后我会处理下一个1035字节。第12和第13个字节是一个值我需要检查以及第1034和1035个字节进行另一次检查。字节14是我需要解析到文件的1016个字节的开始。

事件的顺序应该是:首先检查,检查。第二次检查,检查。如果这些检查失败,则将某个常量字节值写入输出文件(作为标志)。如果它们是好的,请将1016个字节写入输出文件。“

2 个答案:

答案 0 :(得分:2)

需要多个解析?同时?不确定那个要求意味着什么。

我可能会开始简单。将十六进制搜索字符串转换为我要查找的字节数组。使用FileInputStream一次从文件中读取几个字节,并保持运行总数中有多少字节与当前文件字节的搜索字节匹配。

bStream = new BufferedInputStream(new FileInputStream(file));
byte[] bytes = new byte[4096];
int read;
while ((read = bStream.read(bytes)) > 0) {
    // do these new bytes match the pattern I'm looking for
    // accounting for boundaries, etc
}

答案 1 :(得分:1)

内存映射IO,使用文件通道.... FileChannel.map(...)