0

对于网络使用,我需要压缩交换的数据。为了获得更好的性能,我认为将 Android NDK 与 JNI 结合使用会更好。我已经尝试过,但没有成功,因为我对 C 和 JNI 并不精通。

我创建了一个 Java 类:

public class CompressUtils
{
    // Declare native method
    private static native String compressData(String data);
    private static native String decompressData(String data);

    public static String compress(String data)
    {
        return compressData(data);
    }

        static
        {
            System.loadLibrary("compressData");
        }
}

这是C头文件:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_my_app_utils_CompressUtils */

#ifndef _Included_com_my_app_utils_CompressUtils
#define _Included_com_my_app_utils_CompressUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_my_app_utils_CompressUtils
 * Method:    compressData
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_my_app_utils_CompressUtils_compressData
  (JNIEnv *, jclass, jstring);

/*
 * Class:     com_my_app_utils_DecompressUtils
 * Method:    decompressData
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_my_app_utils_CompressUtils_decompressData
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

最后是 C 体:

JNIEXPORT jstring JNICALL Java_com_my_app_utils_CompressUtils_compressData
  (JNIEnv * env, jclass cl, jstring input)
{

}

JNIEXPORT jstring JNICALL Java_com_my_app_utils_CompressUtils_decompressData
  (JNIEnv *env, jclass cl, jstring input)
{

}

我试图将一些真正的 C 代码放入其中,我不明白我应该在这里做什么以及存在哪些好的压缩算法。

你能帮我找到一个好的工作压缩算法和在这里使用它的方法吗?

谢谢

4

1 回答 1

0

您需要做的就是使用 java api 实现。在 java 中实现的算法(例如 gzip)是本机实现的。想想android如何在没有原生支持的情况下高效读取APK文件?

对于这个问题,您可以查看zlib,通过GetStringUTFChars将jstring转换为字符,并压缩成压缩字符,然后以字节数组而不是字符串的形式返回。

于 2013-05-30T04:59:07.770 回答