关闭标准控制台 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);
native 函数用于在线程初始化后在private static voidinitializeSystemClass()
私有(private)方法中初始化最终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 方法/函数来检索控制台句柄的解决方案
我是一名优秀的程序员,十分优秀!