gpt4 book ai didi

java - FileDescriptor 什么时候关闭?

转载 作者:搜寻专家 更新时间:2023-11-01 08:58:17 62 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我相信你是对的。一个小测试表明 FileDescriptor 在其 FileInputStream 关闭后变得无效。请注意,如果同一 FileDescriptor 有多个 FileInputStream,则 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 block 中关闭流,以确保在出现 I/O(读/写)错误时也关闭它。

关于java - FileDescriptor 什么时候关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17263278/

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