如何初始化默认控制台I / O流

时间:2013-07-21 19:45:07

标签: java java-native-interface java-io

关闭它们后,是否可以在执行期间重新打开标准的控制台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.infinal对象,我无法使用诸如

之类的内容对其进行修改
 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'句柄

的解决方案

1 个答案:

答案 0 :(得分:1)

close之后无法重新打开任意流。

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