在JNI中压缩和解压缩String

时间:2013-05-28 10:00:22

标签: java android java-native-interface compression

对于网络使用,我需要压缩交换的数据。为了获得更好的性能,我认为将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代码放在里面,我不明白我应该在这里做什么以及哪个好的压缩算法存在。

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

由于

1 个答案:

答案 0 :(得分:0)

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

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

相关问题