0

如果您想从使用缓冲区读取的文件中查找某些十六进制值并最终将一段代码解析为输出文件,那么最好的方法是什么?我不是在寻找示例代码。

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

你会怎么做?

编辑:完整的事件序列。

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

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

4

2 回答 2

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
}
于 2013-05-30T16:18:09.067 回答
1

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

于 2013-05-30T16:09:21.820 回答