当前位置: 首页 > 面试题库 >

使用Java在二进制文件中搜索字节序列

向锦
2023-03-14
问题内容

我必须使用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排序的文本文件中执行字符串前缀查找(本质上是“寻找”到文件中间的字节偏移,回溯到最近的换行符,然后进行比较)带有搜索字符串的行前缀,“搜索”为字节偏移量的一半/两倍,重复直到找到…) 我已经尝试了几种数据库解决方案,但是发现使用这种大小的数据集,在纯