gpt4 book ai didi

java - 在 Java/Android 中,为什么我能够从 ParcelFileDescriptor 获取整数文件描述符?

转载 作者:行者123 更新时间:2023-12-01 18:29:01 28 4
gpt4 key购买 nike

我已经解决了在 NDK 上编码时遇到的问题,但我不确定该解决方案是否规范,或者是否有规范的方法可以做到这一点。首先描述一下我所做的事情:

我似乎无法使用 Java 的 File 或 FileDescriptor 对象访问整数文件描述符值: http://developer.android.com/reference/java/io/File.html http://developer.android.com/reference/java/io/FileDescriptor.html

但我可以使用 Android 的 ParcelFileDescriptor 对象: http://developer.android.com/reference/android/os/ParcelFileDescriptor.html

所以我可以通过这种方式将整数 fd 获取到我的 native 代码:

pfd = ParcelFileDescriptor.open(new File("blah"), MODE_WRITE_ONLY);
myNativeFunction(pfd.getFd());

为什么这有效?文件描述符整数字段在 File 对象中不是私有(private)的吗,因为即使我拥有该对象也无法访问它?那么,ParcelFileDescriptor 如何通过在其公共(public)方法之一中传递对象来访问这个可能是私有(private)的字段呢?我想知道吗?

最佳答案

how does the ParcelFileDescriptor get to access this presumably private field

整数文件描述符根本不是java.io.File类的一部分。此类包装文件名,可用于文件系统上不存在甚至不能存在的名称。当您使用 Java File 对象时,Linux file 不会打开。因此,要打开文件,我们使用 FileInputStreamFileReader 等众多类之一。

FileDescriptor 类,在核心 Java API 中定义,可用于对打开的文件进行一些操作;它确实“知道”实际的 int 文件描述符(您可以检查其 source code ),但 Android SDK 隔离了这个数字,如 @danske 正确解释。

android.os.ParcelFileDescriptor使用系统库libnativehelper.so来查找值,可以看到相关source code , 也。实际上,您也可以查找nativehelper的来源。

关于java - 在 Java/Android 中,为什么我能够从 ParcelFileDescriptor 获取整数文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025113/

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