java - 如何使用 JNI 从 Java 调用 MEMCMP

标签 java java-native-interface memcmp

我需要比较 2 个字节数组并知道哪一个更大或者它们是否相等(仅相等或不同是不够的)。 字节数组表示 15 个或更多字符的字符串值。 这种比较在我的代码中大量重复。

我想通过使用 Java 中 C++ memcmp 方法的等效方法(希望通过 JNI)来改进 bye 数组比较。 我找到了一个在 C# 中使用 DLLImport 的示例,因此我希望 JNI 调用也可以应用。

这是 C# 代码段:

[DllImport("msvcrt.dll")]
    unsafe static extern int memcmp(void* b1, void* b2, long count);

    unsafe static int ByteArrayCompare1(byte[] b1, int b1Index, int b1Length, byte[] b2, int b2Index, int b2Length)
    {
        CompareCount++;
        fixed (byte* p1 = b1)
        fixed (byte* p2 = b2)
        {
            int cmp = memcmp(p1 + b1Index, p2 + b2Index, Math.Min(b1Length, b2Length));
            if (cmp == 0)
            {
                cmp = b1Length.CompareTo(b2Length);
            }

            return cmp;
        }
    }

有谁知道如何用Java实现这个吗?

提前致谢,

戴安娜

最佳答案

您确定您的代码在这些比较上花费了大量时间吗?我建议现在调用一个Java函数,然后计时;如果还需要,可以添加JNI/JNA。

请记住,通过添加 JNI,您出现错误的机会会显着增加,并且您的程序将仅限于您为其编译库的体系结构。

关于java - 如何使用 JNI 从 Java 调用 MEMCMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3883485/

相关文章:

java - 对 Java 方法签名的完全限定引用

java - 使用 JNI 调用 API 访问静态枚举字段

c++ - 是否可以使用 JNI 在 C 或 C++ 中实现 Java 接口(interface)?

android - 为什么有些 Android 手机会导致我们的应用抛出 java.lang.UnsatisfiedLinkError?

C++比较字节数组和结构的最佳方法

java - 带有泛型和可变参数的模棱两可的重载 java 方法

java - HTML 解析器从正文中提取文本(在 java 中)

c - 对于 q==p 的情况,为什么 memcmp 实现不使用快捷方式 memcmp(q, p, n) ?

c - memcmp 返回值的大小是什么意思?

java - 逐字符读取文件并在其中找到输入字符串