当前位置: 首页 > 面试题库 >

FileDescriptor何时关闭?

厉熠彤
2023-03-14
问题内容

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

  • 打开一个FileInputStream,并获取基础FileDescriptor(通过getFd()
  • FileInputStream根据以上内容创建新对象FileDescriptor

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

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


问题答案:

我相信你是对的。小型测试表明,在关闭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块中关闭流,以确保在发生I / O(读/写)错误时也将其关闭。



 类似资料:
  • 主要内容:1 什么是Java FileDescriptor,2 Java FileDescriptor的属性,3 Java FileDescriptor的构造方法,4 Java FileDescriptor的方法,5 Java FileDescriptor的例子1 什么是Java FileDescriptor FileDescriptor是"文件描述符"。 FileDescriptor可以被用来表示开放的文件,开放的套接字等。 当FileDescriptor表示文件来说,当FileDescrip

  • 我的目标与本期github上所述完全相同: 如何读取现有的. proto文件并从中获取FileDescriptor 我不能使用建议的“变通方法”,原因有二: 我有“普通”. proto文件,即: 它们是文本文件,就像好的旧addressbook.proto 他们不是自我描述 根据Marc的说法,这是可能的,使用协议库: 如果没有编译的模式,您将需要一个运行时。原型解析器。[...] protobu

  • 我有一个单身汉需要开始执行计划。以下是代码: 我不确定何时或是否应该调用执行器的关机方法。我使用的是JEE5,所以我不确定仅仅取消部署应用程序是否会自动执行关机,或者我是否在浪费大量时间,创建大量线程,并且没有杀死它们。 -编辑- 我会再补充一些信息,以防万一。 整个应用程序是一个RESTful web应用程序,使用Jersey作为ServletContainer。

  • 我不想更改端口号,但收到异常“exception in thread”main“java.net.BindException:Address already in use:JVM_Bind” ServerSocket服务器=新服务器套接字(1234180);

  • 问题内容: 我想知道如果不手动关闭流,何时关闭。我的意思是,如果引用的范围不再存在,流将被关闭吗? 请考虑以下示例方案。 在这里,一旦完成流处理,我将退出,但是反过来将继续执行该程序的程序不会终止,而是继续进行其他操作。 我没有关闭溪流。一旦对A类的引用范围结束,它会自动关闭吗?(即何时结束)?GC会照顾吗?另外,我读到,一旦流程结束,流将关闭,并且系统释放为其他进程保留的所有资源。我们如何检查流

  • 问题内容: 我正在构建WSGI Web应用程序,并且有一个MySQL数据库。我正在使用MySQLdb,它提供了用于执行语句和获取结果的游标。 获取和关闭游标的标准做法是什么? 特别是,我的光标应持续多长时间?我应该为每个交易获取一个新的游标吗? 我相信您需要在提交连接之前关闭游标。查找不需要中间提交的事务集是否有任何显着的优势,这样您就不必为每个事务获取新的游标?获取新的游标是否有很多开销,还是不