在android中,有两个类LocalServerSocket和LocalSocket.我认为它们类似于unix socket中的AF_LOCAL(我不确定它是否正确).
我的问题是:是否可以在Java中创建LocalServerSocket并使用普通的unix套接字客户端在本机或其他进程中连接到它?
如果有可能,我应该在本机中设置"sockaddr_un.sun_path"是什么?
我编写了一个示例项目来测试它,我尝试将.sun_path设置为与LocalServerSocket中使用的字符串名称相同,但是它失败了,本机无法连接到Java LocalServerSocket.
我的Java代码:
package test.socket;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class TestSocketActivity extends Activity {
public static String SOCKET_ADDRESS = "my.local.socket.address";
public String TAG = "Socket_Test";
static{System.loadLibrary("testSocket");}
private native void clientSocketThreadNative();
private native void setStopThreadNative();
localServerSocket mLocalServerSocket;
localClientSocket mLocalClientSocket;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mLocalServerSocket = new localServerSocket(); …Run Code Online (Sandbox Code Playgroud) 是否可以在JNI中引用整个bytearray但不调用任何副本?
在本机C代码中,我有一个从Java传递的bytearray,我只是想将一些数据与这个bytearray进行比较,所以我不想做任何内存复制.可能吗 ?
我知道我可以通过使用GetPrimitiveArrayCritical来获取本地的bytearray指针
JNIEXPORT jbyteArray JNICALL Java_nfore_android_bt_pro_nfhfp_dsp
(JNIEnv *env, jobject jobj, jbyteArray jbIn, jbyteArray jbBase){
jbyte *bufferIn;
jbyte *bufferBase;
bufferIn = (*env)->GetPrimitiveArrayCritical(env, jbIn, NULL);
LOGD("Begin of dsp()");
LOGD("In dsp() Before Comparing...");
// Compare bufferIn with bufferBase here...
LOGD("In dsp() After Comparing...");
LOGD("End of dsp()");
(*env)->ReleasePrimitiveArrayCritical(env, jbIn, bufferIn, 0);
return jbIn;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,因为我可能会更改jbIn中的数据,所以我应该使用GetPrimitiveArrayCritical获取其指针并稍后释放它.
但是,如果我只想读取bytearray jbBase,我怎么能得到jbBase的指针但不使用GetPrimitiveArrayCritical?
任何建议将不胜感激.非常感谢.
有人可以告诉我有什么区别
using namespace android;
....
Run Code Online (Sandbox Code Playgroud)
和
namespace android {
....
}
Run Code Online (Sandbox Code Playgroud)
我发现Android源代码中的几乎所有.cpp文件都使用第二个.cpp文件.
另外,如果我想在我自己的项目中包含一些使用第二种类型的文件,我是否namespace android{...}也需要使用?
因为如果我不这样做,编译器会在调用包含文件的方法时报告错误.或者我需要在方法调用之前添加任何前缀?
android ×1
bytearray ×1
c++ ×1
java ×1
namespaces ×1
sockets ×1
terminology ×1
unix ×1
using ×1