首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java / Android中,为什么我能够从ParcelFileDescriptor获得一个整数文件描述符?

在Java / Android中,为什么我能够从ParcelFileDescriptor获得一个整数文件描述符?
EN

Stack Overflow用户
提问于 2014-07-29 21:15:38
回答 2查看 2.7K关注 0票数 0

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

看来我无法使用Java的文件或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传递到我的本机代码:

代码语言:javascript
运行
复制
pfd = ParcelFileDescriptor.open(new File("blah"), MODE_WRITE_ONLY);
myNativeFunction(pfd.getFd());

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-30 22:03:38

ParcelFileDescriptor如何访问这个可能是私有的字段?

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2014-07-30 11:38:09

Java.io.File和Java.io.FileDescriptor是Sun定义的基本Java的一部分,从设计上来说,它从不向系统公开整数文件描述符。这很可能是为了抽象,即使Java程序可移植到不使用简单整数标识打开的文件描述符的自定义操作系统。

另一方面,android.os.ParcelFileDescriptor是一个特定于Android的API,而基于Linux的Android则总是使用整数来建模文件描述符,所以公开它是可以的。

不过,您可能不需要确切地知道ParcelFileDescriptor是如何执行其魔力的。只是我的两分钱。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25025113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档