关闭标准控制台 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 方法/函数来检索控制台句柄的解决方案
最佳答案
关闭
后,无法重新打开任意流。
话虽如此,您可以使用 System.setIn
使用任何 InputStream
作为标准输入。 ByteArrayInputStream.close
不执行任何操作,您可以创建自己的无法关闭的 InputStream
。
关于java - 如何初始化默认控制台 I/O 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17776181/