李开复创新工场推3大投资计划:针对4大领域
2010-09-09 00:04
253 查看
由于env->NewStringUTF支持的是 Modified UTF-8,所以这个API不能用来从JNI
中传入标准的UTF8字符到Java。
我们有两种解决方法:
Java代码
ReturnUTF8.java
view plaincopy to clipboardprint?
public class ReturnUTF8 {
static {
System.loadLibrary("ReturnUTF8Jni");
}
public static native byte[] method1();
public static native Object method2();
public static void main(String[] args) {
try {
byte[] buffer = ReturnUTF8.method1();
String s1 = new String(buffer, "UTF-8");
System.out.println("s1 = " + s1);
String s2 = ReturnUTF8.method2().toString();
System.out.println("s2 = " + s2);
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
public class
ReturnUTF8 {
static {
System.loadLibrary("ReturnUTF8Jni");
}
public static native byte[] method1();
public static native Object method2();
public static void main(String[] args) {
try {
byte[] buffer = ReturnUTF8.method1();
String s1 = new String(buffer, "UTF-8");
System.out.println("s1 = " + s1);
String s2 = ReturnUTF8.method2().toString();
System.out.println("s2 = " + s2);
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
# javac ReturnUTF8.java
# javah ReturnUTF8
-> 这里会生成一个ReturnUTF8.h头文件
C++代码
ReturnUTF8.cpp
view plaincopy to clipboardprint?
#include "ReturnUTF8.h"
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method1
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
return bytes;
}
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method2
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
jchar encoding_name[] = { 'U', 'T', 'F', '-', '8', '' };
jstring encoding = env->NewString(encoding_name, 5);
jclass theStringClass = env->FindClass("Ljava/lang/String;");
jmethodID mid = env->GetMethodID(theStringClass, "", "([BLjava/lang/String;)V");
jobject result = env->NewObject(theStringClass, mid, bytes, encoding);
return result;
}
#include
"ReturnUTF8.h"
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method1
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
return bytes;
}
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method2
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
jchar encoding_name[] = { 'U', 'T', 'F', '-', '8', '' };
jstring encoding = env->NewString(encoding_name, 5);
jclass theStringClass = env->FindClass("Ljava/lang/String;");
jmethodID mid = env->GetMethodID(theStringClass, "",
"([BLjava/lang/String;)V");
jobject result = env->NewObject(theStringClass, mid, bytes,
encoding);
return result;
}
# g++ -shared -I /usr/lib/jvm/java-1.5.0-sun/include -I /usr/lib/jvm/java-1.5.0-sun/include/linux ReturnUTF8.cpp -o libReturnUTF8Jni.so
# export LD_LIBRARY=.
# java ReturnUTF8
中传入标准的UTF8字符到Java。
我们有两种解决方法:
Java代码
ReturnUTF8.java
view plaincopy to clipboardprint?
public class ReturnUTF8 {
static {
System.loadLibrary("ReturnUTF8Jni");
}
public static native byte[] method1();
public static native Object method2();
public static void main(String[] args) {
try {
byte[] buffer = ReturnUTF8.method1();
String s1 = new String(buffer, "UTF-8");
System.out.println("s1 = " + s1);
String s2 = ReturnUTF8.method2().toString();
System.out.println("s2 = " + s2);
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
public class
ReturnUTF8 {
static {
System.loadLibrary("ReturnUTF8Jni");
}
public static native byte[] method1();
public static native Object method2();
public static void main(String[] args) {
try {
byte[] buffer = ReturnUTF8.method1();
String s1 = new String(buffer, "UTF-8");
System.out.println("s1 = " + s1);
String s2 = ReturnUTF8.method2().toString();
System.out.println("s2 = " + s2);
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
# javac ReturnUTF8.java
# javah ReturnUTF8
-> 这里会生成一个ReturnUTF8.h头文件
C++代码
ReturnUTF8.cpp
view plaincopy to clipboardprint?
#include "ReturnUTF8.h"
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method1
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
return bytes;
}
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method2
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
jchar encoding_name[] = { 'U', 'T', 'F', '-', '8', '' };
jstring encoding = env->NewString(encoding_name, 5);
jclass theStringClass = env->FindClass("Ljava/lang/String;");
jmethodID mid = env->GetMethodID(theStringClass, "", "([BLjava/lang/String;)V");
jobject result = env->NewObject(theStringClass, mid, bytes, encoding);
return result;
}
#include
"ReturnUTF8.h"
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method1
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
return bytes;
}
JNIEXPORT jbyteArray JNICALL Java_ReturnUTF8_method2
(JNIEnv *env, jclass cls)
{
jbyte buffer[] = /* UTF8 encoding buffer */
jbyteArray bytes = env->NewByteArray(sizeof(buffer));
env->SetByteArrayRegion(bytes, 0, sizeof(buffer), buffer);
jchar encoding_name[] = { 'U', 'T', 'F', '-', '8', '' };
jstring encoding = env->NewString(encoding_name, 5);
jclass theStringClass = env->FindClass("Ljava/lang/String;");
jmethodID mid = env->GetMethodID(theStringClass, "",
"([BLjava/lang/String;)V");
jobject result = env->NewObject(theStringClass, mid, bytes,
encoding);
return result;
}
# g++ -shared -I /usr/lib/jvm/java-1.5.0-sun/include -I /usr/lib/jvm/java-1.5.0-sun/include/linux ReturnUTF8.cpp -o libReturnUTF8Jni.so
# export LD_LIBRARY=.
# java ReturnUTF8
相关文章推荐
- 李开复公布创新工场计划
- 李开复公布创新工场计划
- 创新工场李开复:三领域将有几十倍增长空间(移动互联网,电子商务,云计算)
- 李开复:创新工场75%精力放在移动互联网领域 - 冲动性消费,游戏性抢购
- 李开复公布创新工场计划
- 创新工场-李开复上亿创业投资基金做什么?如何获得李开复的投资?
- 李开复:如何设计你的2015年度计划(转)
- 奥地利计划针对加密货币与ICO实施监管
- 投资是计划,不是产品或过程(2)
- 李开复的 给创新工场求职者的一封信
- 羽泉玩创投已有5年:曾向创新工场李开复请教
- 跨国风投公司加入区块链投资领域
- LendEDU调查:33%的美国年轻人计划投资以太坊
- 十二五物联网重点投资十大领域
- 腾讯发起针对基础架构的自由软件项目的漏洞奖励计划
- BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)
- DDos攻击的一些领域知识——(流量模型针对稳定业务比较有效)不稳定业务采用流量成本的检测算法,攻击发生的时候网络中各个协议的占比发生了明显的变化
- 李开复:如何设计你的2015年度计划
- 中国近五年投资美国AI产业全景图:腾讯、创新工场最积极