Java InputStream在Thread中关闭
发布时间:2020-12-15 04:26:56 所属栏目:Java 来源:网络整理
导读:我试图从线程中的InputStream读取. Thread应该运行的类看起来像这样 static private class Runner implements Runnable { private InputStream fis; private OutputStream fos; public Runner(InputStream fis,OutputStream fos) throws IOException { int b
我试图从线程中的InputStream读取.
Thread应该运行的类看起来像这样 static private class Runner implements Runnable { private InputStream fis; private OutputStream fos; public Runner(InputStream fis,OutputStream fos) throws IOException { int blu = fis.available(); System.out.println(blu); this.fis = fis; int bla = this.fis.available(); System.out.println(bla); this.fos = fos; } @Override public void run() { try { int bla = fis.available(); System.out.println(bla); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(fis); System.out.println(fos); } } Thread就是这样创建的 final Runnable runnable = new Runner(fis,fos); final Thread thread = new Thread(runnable); thread.start(); 并且在线程上应该运行run方法.但是一旦执行它就会得到错误 java.nio.channels.ClosedChannelException 我调试了它,InputStream设置为关闭. 为什么在Thread中关闭InputStream?有没有我应该使用的替代方案? 编辑: 我忘了提到它们是在这样的试块中打开的,之后主要功能就结束了. try (InputStream fis = Files.newInputStream(sourcePath)) { try (OutputStream fos = Files.newOutputStream(sinkPath)) { final Runnable runnable = new Runner(fis,fos); final Thread thread = new Thread(runnable); thread.start(); } } 解决方法
当块退出时,那些
try-with-resources块将关闭它们各自的流.当您只计划使用块内的流时,这很好.但是因为你想在块结束后继续在另一个线程中使用流,所以去除块.
InputStream fis = Files.newInputStream (sourcePath); OutputStream fos = Files.newOutputStream(sinkPath); final Runnable runnable = new Runner(fis,fos); final Thread thread = new Thread(runnable); thread.start(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读