小编Boh*_* Lu的帖子

Android LocalServerSocket

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

java unix sockets java-native-interface android

11
推荐指数
2
解决办法
1万
查看次数

如何在JNI中读取bytearray?

是否可以在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?

任何建议将不胜感激.非常感谢.

java-native-interface bytearray pass-by-reference

5
推荐指数
2
解决办法
1万
查看次数

"using"命名空间和声明命名空间有什么区别?

有人可以告诉我有什么区别

using namespace android;
    .... 
Run Code Online (Sandbox Code Playgroud)

namespace android {
    ....
}
Run Code Online (Sandbox Code Playgroud)

我发现Android源代码中的几乎所有.cpp文件都使用第二个.cpp文件.
另外,如果我想在我自己的项目中包含一些使用第二种类型的文件,我是否namespace android{...}也需要使用?
因为如果我不这样做,编译器会在调用包含文件的方法时报告错误.或者我需要在方法调用之前添加任何前缀?

c++ namespaces terminology using using-directives

1
推荐指数
1
解决办法
1756
查看次数