java - 关闭InputStream是否会关闭与其关联的Channel?

标签 java nio

如果我从 InputStream 创建一个 Channel,然后关闭 InputStream,是否会关闭关联的 Channel?我是否需要显式关闭关联的Channel?我知道关闭 Channel 会关闭 Stream,但是反过来呢?

try (InputStream ioStream = getInputStream()) {
    ReadableByteChannel inputChannel = Channels.newChannel(ioStream);
    //do something
} 

最佳答案

一般情况下,InputStreamChannel一无所知,因此关闭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/

相关文章:

java - 为什么 SBT 检测不到 Java 中的主类? (未检测到主类)

java - 如何获取Floatbuffer存储的float[]?

java - NIO读写的很多问题

java - "system-dependent default"线程池是什么?

java - JDBC 连接失败 : java. sql.SQLException: Communication link failure: Bad handshake

java - 解析字符串 "((1/2)/3/)4"和其他类似字符串的好方法

java - 无法在 flipkart 搜索结果页面中找到元素

java - 将阻塞 Socket 对象转换为 SocketChannel 的套接字?

java - JAR 文件中的 walkFileThree

java - Grails 应用程序 - Tomcat 与 Weblogic 上的 JNDI