我将尝试在一个线程中从输入流中读取数据。
这个线程应该运行的类看起来像这样
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);
}
}
线程是这样创建的:
final Runnable runnable = new Runner(fis, fos);
final Thread thread = new Thread(runnable);
thread.start();
在线程上应该运行run方法。但是一旦执行它就会出现错误。
java.nio.channels.ClosedChannelException
我调试了一下,发现InputStream已经关闭。
为什么InputStream会在线程中被关闭呢?有没有其他的替代方法可以使用?
编辑:
我忘记提到它们是在try块中打开的,就像这样,在那之后主函数就结束了。
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();
}
}