首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileDescriptor什么时候关门?

FileDescriptor什么时候关门?
EN

Stack Overflow用户
提问于 2013-06-23 17:18:27
回答 1查看 8.4K关注 0票数 2

我的应用程序需要做以下工作:

  • 打开一个FileInputStream,并获得底层FileDescriptor (通过getFd())
  • 基于上面的FileInputStream创建新的FileDescriptor对象

到目前为止,我只需要一个FileDescriptor,所以我过去常常通过在原始流上调用close()来关闭它(也就是在我调用的getFd()流上)。我之所以使用它,是因为有些Android方法有这样的参数。

现在我将同时拥有更多的FileInputStream对象,什么时候关闭FileDescriptor?(我猜:当所有FileInputStream对象都关闭时?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-23 17:36:11

我相信你是对的。一个小测试表明,FileDescriptor在关闭其FileInputStream后会变得无效。请注意,如果同一FileDescriptor有多个FileDescriptor,则当第一个FileInputStream关闭时,FileDescriptor就会失效,也就是说,关闭第一个fis1,然后关闭fis2,或者反过来关闭并不重要:

代码语言:javascript
复制
FileInputStream fis1 = new FileInputStream("/tmp/adb.log");
FileDescriptor fd = fis1.getFD();
FileInputStream fis2 = new FileInputStream(fd);
System.out.println(fd.valid());
fis1.close();
System.out.println(fd.valid());
fis2.close();
System.out.println(fd.valid());

产出如下:

代码语言:javascript
复制
true
false
false

不要忘记关闭finally块中的流,以确保在I/O (读/写)错误时也关闭它。

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

https://stackoverflow.com/questions/17263278

复制
相关文章

相似问题

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