我想在转换过程中避免字符串转换。因为它很慢。我建议内部V8 String
和Java jstring
是相同的宽字符序列,所以也许可以不使用de / encoding进行复制,甚至可以避免完全复制?
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 :(得分:0)
考虑到一些假设,你是对的。
Java字符串是Unicode字符的UTF-16编码的计数代码单元序列。字节序旨在匹配操作系统的默认值。
JavaScript字符串是16-bit unsigned integers的计数序列。
除非您调用执行此操作的函数(即ASCII或UTF-8),否则V8不会转换字符串的数据。
因此,如果您的输入实际上是带有具有预期字节序的UTF-16编码的Unicode字符串,那么您提供的代码将起作用并且应该是最有效的。
然而,
wchar_t* w_chars = (wchar_t*)(*v8_text);
有点误导,因为wchar_t
具有依赖于实现的大小。最后,您只想将指针转换为jchar *
,因此,如果需要执行此步骤,我建议char16_t *
或uint16_t *
,因为它们表示假设数据的结构为2字节带有字节序的块。