如果您想要从正在使用缓冲区读入的文件中找到某些十六进制值,并最终将一段代码解析为输出文件,那么执行此操作的最佳方法是什么?我不是在寻找示例代码。
这是一个非常大的文件,需要多个解析。我应该把它全部读成阵列吗?什么样的阵列?这将取决于搜索我正在寻找的十六进制值的最佳方式,我不确定如何在java中搜索十六进制值。
你会怎么做?
编辑:完整的事件序列。
“抱歉,我想这会让人感到困惑。完整的解释。我会一直搜索标记字节模式。找到它。然后我会处理下一个1035字节。第12和第13个字节是一个值我需要检查以及第1034和1035个字节进行另一次检查。字节14是我需要解析到文件的1016个字节的开始。
事件的顺序应该是:首先检查,检查。第二次检查,检查。如果这些检查失败,则将某个常量字节值写入输出文件(作为标志)。如果它们是好的,请将1016个字节写入输出文件。“
答案 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(...)