我的应用程序需要做以下工作:
FileInputStream,并获得底层FileDescriptor (通过getFd())FileInputStream创建新的FileDescriptor对象到目前为止,我只需要一个FileDescriptor,所以我过去常常通过在原始流上调用close()来关闭它(也就是在我调用的getFd()流上)。我之所以使用它,是因为有些Android方法有这样的参数。
现在我将同时拥有更多的FileInputStream对象,什么时候关闭FileDescriptor?(我猜:当所有FileInputStream对象都关闭时?)
发布于 2013-06-23 17:36:11
我相信你是对的。一个小测试表明,FileDescriptor在关闭其FileInputStream后会变得无效。请注意,如果同一FileDescriptor有多个FileDescriptor,则当第一个FileInputStream关闭时,FileDescriptor就会失效,也就是说,关闭第一个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 (读/写)错误时也关闭它。
https://stackoverflow.com/questions/17263278
复制相似问题