gpt4 book ai didi

android - FileDescriptor在Android中的实际系统文件描述符(作为int)

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:13 32 4
gpt4 key购买 nike

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

编辑:我找到了 getParcelFileDescriptorFD 并且 FileDescriptor 具有名为“descriptor”的 int 字段,示例用法在 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 的一部分。有记录在案的“正确”方法吗?

最佳答案

dalvik/libcore/ 中的 native 代码使用 java_io_FileDescriptor.c 中的 jniGetFDFromFileDescriptor 但您不应该自己调用它,因为它不是稳定的 API .您可以复制并粘贴该代码,但在这样做之前您真的要三思而后行。使用 JNI 访问实现细节只是在乞求您的代码将来被意外破坏!

更好的选择是:

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

  2. 如果您确实必须在 native 端执行 I/O(如媒体播放器的情况)保持 native 端的 I/O:调用 open(2 ) 或那一边的任何东西,将 fd 保持为 int 而不是与 FileDescriptor 对象混淆,并且如果您将任何东西传回 Java,则传递 int 或您自己的对象(除了向下传回之外,无意将其用于任何其他用途到您的 native 代码)。

这两个选择今天有效,并且不会因您无法控制的 Android 实现细节的更改而意外中断。

关于android - FileDescriptor在Android中的实际系统文件描述符(作为int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123828/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com