Java 在JNI中将v8::String转换为jstring的最快方法是什么?
我希望在转换过程中避免字符串转换。因为它很慢。我建议在内部V8Java 在JNI中将v8::String转换为jstring的最快方法是什么?,java,android,performance,java-native-interface,v8,Java,Android,Performance,Java Native Interface,V8,我希望在转换过程中避免字符串转换。因为它很慢。我建议在内部V8String和Javajstring是相同的宽字符序列,因此可能不需要反编码就可以复制,或者甚至可以避免完全复制 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_ch
String
和Javajstring
是相同的宽字符序列,因此可能不需要反编码就可以复制,或者甚至可以避免完全复制
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());
以上已经是最有效的方法了吗
比你考虑到一些假设,你是对的 Java字符串是Unicode字符UTF-16编码的代码单元的计数序列。endianness旨在匹配操作系统的默认值 JavaScript字符串是一个计数序列 V8不会转换字符串的数据,除非调用执行此操作的函数(即转换为ASCII或UTF-8) 因此,如果您的输入实际上是一个Unicode字符串,使用UTF-16编码,并具有预期的endianness,那么您给出的代码将起作用,并且应该是最有效的 但是,
wchar_t* w_chars = (wchar_t*)(*v8_text);
这有点误导,因为wchar\u t
具有依赖于实现的大小。最后,您只需要将指针投射到jchar*
,因此,如果需要此步骤,我建议使用char16\u t*
或uint16\u t*
,因为它们表示的假设是,数据以2字节块的结尾结构