关闭它们后,是否可以在执行期间重新打开标准的控制台I / O流?
public static void main(String[] args) throws IOException {
System.out.println("Hello World!!!");
System.out.println("1:" + System.in.read());
System.out.println("" + FileDescriptor.in.valid()); //true
System.in.close();
System.out.println("" + FileDescriptor.in.valid()); //false
System.out.println("2:" + System.in.read()); //IOException
System.in.close();
}
从this帖子我可以看出private static native void setIn0(InputStream in);
本机函数用于在线程初始化后在private static void initializeSystemClass()
私有方法中初始化最终I / O流。
我可以重新初始化I / O流吗?
修改
由于System.in
是final
对象,我无法使用诸如
System.in=new InputStream() {
@Override
public int read() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
在运行期间......
我期待的是通过Native Methods / Function检索Console'句柄
答案 0 :(得分:1)
在close
之后无法重新打开任意流。
话虽如此,您可以使用System.setIn
将任何InputStream
用作标准输入。 ByteArrayInputStream.close
没有做任何事情,您可以创建自己无法关闭的InputStream
。