我必须使用Java在一组二进制文件中搜索一组字节。
示例:我DEADBEEF
在二进制文件中搜索字节序列(以十六进制表示)。我将如何在Java中执行此操作?是否有内置方法,例如String.contains()
二进制文件?
不,没有内置方法可以做到这一点。但是,直接从此处复制(对原始代码有两个修复):
/**
* Knuth-Morris-Pratt Algorithm for Pattern Matching
*/
class KMPMatch {
/**
* Finds the first occurrence of the pattern in the text.
*/
public static int indexOf(byte[] data, byte[] pattern) {
if (data.length == 0) return -1;
int[] failure = computeFailure(pattern);
int j = 0;
for (int i = 0; i < data.length; i++) {
while (j > 0 && pattern[j] != data[i]) {
j = failure[j - 1];
}
if (pattern[j] == data[i]) { j++; }
if (j == pattern.length) {
return i - pattern.length + 1;
}
}
return -1;
}
/**
* Computes the failure function using a boot-strapping process,
* where the pattern is matched against itself.
*/
private static int[] computeFailure(byte[] pattern) {
int[] failure = new int[pattern.length];
int j = 0;
for (int i = 1; i < pattern.length; i++) {
while (j > 0 && pattern[j] != pattern[i]) {
j = failure[j - 1];
}
if (pattern[j] == pattern[i]) {
j++;
}
failure[i] = j;
}
return failure;
}
}
问题内容: 我被要求对数组进行排序和搜索。对数组进行排序很简单,我的代码也起作用了,但是每当我尝试调用二进制搜索方法时,它就可以对数组中的第一个元素起作用,但是结果是“ -1” 我的完整代码如下: 问题答案: 您搞砸了二进制搜索间隔
问题内容: 我在将这两种算法结合在一起时遇到麻烦。我被要求修改以返回将元素插入数组的索引。然后有人要求我实现一个使用my 对随机生成的数组进行排序的。 我按照预期的方式工作,每当我单独测试它时都返回正确的索引。我写信是为了了解它是如何工作的,并使其也能工作。一旦将两者结合在一起,它就会崩溃。我知道我在一起实施起来不正确,但是我不确定问题出在哪里。 这是我得到的: 我在运行它时得到的返回值是。有什么
给定二叉查找树(BST)和整数val的根。 在BST中找到该节点的值等于val的节点,并返回以该节点为根的子树。如果这样的节点不存在,则返回null。 为什么'ans=root'不起作用??
本文向大家介绍在Javascript二进制搜索树中搜索值,包括了在Javascript二进制搜索树中搜索值的使用技巧和注意事项,需要的朋友参考一下 我们将使用BST的属性在其中查找元素。首先让我们看一下搜索的迭代实现- 示例 在此功能中,我们从根作为currNode开始,然后将我们的数据与currNode的数据进行比较。如果找到匹配项,则返回true,否则我们将继续根据数据与currNode数据
问题内容: 目前,我可以按如下方式检索文本页面 假设get以二进制文件为目标。如何将其正确保存到磁盘? 问题答案: 只是不要通过-从中读取数据并将其写入。
问题内容: 我正在努力将Perl程序移植到Java,并在学习过程中学习Java。原始程序的核心组件是Perl模块,该模块使用二进制搜索在+500 GB排序的文本文件中执行字符串前缀查找(本质上是“寻找”到文件中间的字节偏移,回溯到最近的换行符,然后进行比较)带有搜索字符串的行前缀,“搜索”为字节偏移量的一半/两倍,重复直到找到…) 我已经尝试了几种数据库解决方案,但是发现使用这种大小的数据集,在纯