FileDescriptor在Android中的实际系统文件描述符(如int)

时间:2010-01-23 16:35:28

标签: android native

有没有办法从Android的FileDescriptor对象获取系统文件描述符(套接字或文件号为int)?我想直接在JNI代码中访问文件描述符而不使用任何Java包装器。

编辑: 我找到了getParcelFileDescriptorFD,并且FileDescriptor的int字段名为“descriptor”,media/jni/android_media_MediaPlayer.cpp中的示例用法,func定义在frameworks/base/core/jni/android_util_Binder.cpp,字段本身在libcore/luni/src/main/java/java/io/FileDescriptor.java

但这不是官方记录的API的一部分。是否有记录在案的“正确”方法?

1 个答案:

答案 0 :(得分:5)

dalvik/libcore/中的

原生代码使用jniGetFDFromFileDescriptor中的java_io_FileDescriptor.c,但您不应该自己调用它,因为它不是稳定的API。你可以复制&粘贴该代码,但你真的想在这之前三思而后行。使用JNI访问实现细节只是要求您的代码在将来意外中断!

更好的选择是:

  1. 如果可以,请将I / O保留在Java端。

  2. 如果您必须在本机端进行I / O(如在媒体播放器的情况下)保留本机端的I / O:呼叫打开(2 )或者那边的任何东西,把fd保持为int而不是弄乱FileDescriptor对象,如果你把任何东西传回给Java传递int或你自己的对象(除了传回来之外没有任何意图用它)到您的原生代码。)

  3. 这两个选择今天起作用,并且不会因为您无法控制的Android实施细节的更改而意外中断。