2013-05-28 2 views
0

네트워크 사용의 경우 교환 된 데이터를 압축해야합니다. 성능 향상을 위해 JNI와 함께 Android NDK를 사용하는 것이 더 나은 방법이라고 생각합니다. 저는 C/JNI에 능숙하지 않아 성공하지 못했습니다.JNI에서 문자열 압축 및 압축 해제

/* 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) 
{ 

} 

여기

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 헤더 파일입니다

나는 자바 클래스를 만들었습니다 실제 C 코드를 넣으려면 여기에서해야 할 일과 좋은 압축 algorythm이 존재하는지 이해하지 못합니다.

좋은 압축 압축 algorythm을 찾고 여기에서 사용하는 방법을 찾을 수 있습니까?

감사합니다.

+0

JNI가 전혀 필요 없다고 잘못 생각한 것 같습니다. 압축을 원하면 JDK에서 제공하는 압축 출력 스트림 중 하나를 사용하십시오. java.util.zip을 참조하십시오. – EJP

답변

0

자바 API 구현을 사용하면됩니다. gzip과 같은 java에서 구현 된 알고리즘은 기본적으로 구현됩니다. 안드로이드가 네이티브 지원없이 APK 파일을 효율적으로 읽을 수있는 방법에 대해 생각해보십시오.

이 문제의 경우, zlib을 확인 GetStringUTFChars를 통해 문자로 jstring으로 변환, 압축 문자로 압축 한 다음 바이트 배열보다는 문자열의 형태로 반환 할 수 있습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. Gzip은 괜찮지 만, 나는 정말 빠른 것을 필요로한다. 안드로이드 장치에서 거의 100 번 à 분의 텍스트 문자열을 압축해야합니다. – Manitoba

+0

Gzip은 가장 빠른 압축 알고리즘 중 하나입니다. – Joni