Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JNI中将v8::String转换为jstring的最快方法是什么?_Java_Android_Performance_Java Native Interface_V8 - Fatal编程技术网

Java 在JNI中将v8::String转换为jstring的最快方法是什么?

Java 在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

我希望在转换过程中避免字符串转换。因为它很慢。我建议在内部V8
String
和Java
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());
以上已经是最有效的方法了吗


比你

考虑到一些假设,你是对的

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字节块的结尾结构