1

关闭标准控制台 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();
}

这篇文章中我可以看出,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.
                }
            }

在运行时......
我期待的是通过本机方法/函数来检索控制台的句柄的解决方案

4

1 回答 1

1

没有办法在你之后重新打开任意流close

话虽如此,您可以System.setIn使用 anyInputStream作为标准输入。ByteArrayInputStream.close不做任何事情,您可以创建自己的InputStream无法关闭的。

于 2013-07-21T19:52:55.813 回答