如果我从 InputStream
创建一个 Channel
,然后关闭 InputStream
,是否会关闭关联的 Channel
?我是否需要显式关闭关联的Channel
?我知道关闭 Channel 会关闭 Stream,但是反过来呢?
try (InputStream ioStream = getInputStream()) {
ReadableByteChannel inputChannel = Channels.newChannel(ioStream);
//do something
}
最佳答案
一般情况下,InputStream
对Channel
一无所知,因此关闭InputStream
无法自动关闭Channel
。
但是,在 InputStream
关闭后尝试从 Channel
读取数据将会抛出 IOException
:
- channel 必须通过
InputStream.getBytes()
从输入流获取数据
如果输入流已关闭, InputStream.getBytes()
将抛出IOException
。
对于 FileInputStream
的特殊情况,Channels.newChannel(ioStream)
调用将返回 FileInputStream.getChannel()
,因此在这种特殊情况下,关闭输入流也将关闭 channel 。
关于java - 关闭InputStream是否会关闭与其关联的Channel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60600646/