对于网络使用,我需要压缩交换的数据。为了获得更好的性能,我认为将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代码放在里面,我不明白我应该在这里做什么以及哪个好的压缩算法存在。
你能帮助我找到一个好的工作压缩算法以及在这里使用它的方法吗?
由于
答案 0 :(得分:0)
您只需使用java api实现即可。在Java中实现的算法(例如gzip)是本地实现的。想想android如何在没有原生支持的情况下有效地读取APK文件?
对于这个问题,您可以查看zlib
,通过GetStringUTFChars将jstring转换为chars,然后压缩为压缩字符,然后以字节数组而不是字符串形式返回。