2013-06-07 2 views
1

변환 중에 문자열 변환을 피하고 싶습니다. 왜냐하면 천천히. 내부적으로 V8 String과 Java jstring은 와이드 char과 동일한 순서이므로, 인코딩하지 않고 복사하거나 어쩌면 완전히 복사하지 않을 수도 있습니다.JNI에서 v8 :: String을 jstring으로 변환하는 가장 빠른 방법은 무엇입니까?

v8::String::Value v8_text(args[1]); // get the v8 string from arguments 
wchar_t* w_chars = (wchar_t*)(*v8_text); 
jstring j_text = (Env)->NewString((jchar*)w_chars, v8_text.length()); 

은 이미 가장 효율적인 방법입니까?

보다

답변

0

몇 가지 가정하에 귀하가 맞습니다.

Java 문자열은 유니 코드 문자의 UTF-16 인코딩 코드 단위의 카운트 된 시퀀스입니다. 엔디안은 OS의 기본값과 일치해야합니다.

JavaScript 문자열은 16-bit unsigned integers의 계산 된 시퀀스입니다.

V8은 사용자가 (ASCII 또는 UTF-8로) 함수를 호출하지 않는 한 문자열에 대한 데이터를 변환하지 않습니다.

입력이 실제로 예상되는 엔디안과 UTF-16 인코딩을 사용하는 유니 코드 문자열 인 경우 사용자가 제공 한 코드가 작동하며 가장 효율적이어야합니다. wchar_t은 구현 의존적 크기를 갖고 있기 때문에

,

wchar_t* w_chars = (wchar_t*)(*v8_text); 

약간 잘못이다. 궁극적으로이 포인터가 jchar *으로 캐스팅되기를 바란다.이 단계가 필요한 경우 데이터가 2 바이트 청크로 엔디 언으로 구성되었다는 가정을 표현하기 때문에 대신 char16_t * 또는 uint16_t *을 제안한다.

관련 문제