FileDescriptor什么时候关闭?

时间:2013-06-23 17:18:27

标签: java android file-descriptor fileinputstream

我的应用需要执行以下操作:

  • 打开FileInputStream,获取基础FileDescriptor(通过getFd()
  • 根据上述FileInputStream
  • 创建新的FileDescriptor个对象

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

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

1 个答案:

答案 0 :(得分:3)

我相信你是对的。小测试显示FileDescriptor关闭FileInputStream后无效。请注意,如果同一个FileInputStream有多个FileDescriptor,则FileDescriptor会在其第一个FileInputStream关闭后变为无效,即如果fis1无效则无效您先关闭fis2,然后关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()); ,或者反过来关闭:

true
false
false

输出是:

finally

不要忘记关闭{{1}}块中的流,以确保在发生I / O(读/写)错误时也将其关闭。