bot*_*bot 4 java inputstream try-with-resources
像这样:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作.安全吗?
And*_*ner 12
它似乎工作
如果您之前添加InputStream(或某些超类型InputStream),它将会执行in:语言规范要求您为每个资源声明一个变量.
try (InputStream in = fileIn) { ... }
Run Code Online (Sandbox Code Playgroud)
或者直接fileIn在Java 9+中直接引用:
try (fileIn) { ... }
Run Code Online (Sandbox Code Playgroud)
并且没有理由它不应该工作:使用变量声明形式,您将为变量分配表达式(新类,方法调用的结果,数组元素等).资源无法看到它是否正在获取"新"实例:它只是具有正确类型值的事物.
这样安全吗?
取决于"安全"究竟是什么意思.
它在某些意义上肯定是安全的,它将在此代码中无错误地工作,并将in.close()在块的末尾调用.
但是,它违反了经验法则"如果你没有打开流,就不要关闭它".因此,它可能是不安全的,因为它会导致程序的其他部分出现意外故障,这些部分期望在调用方法后流仍然打开.