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

标签 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); 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/

相关文章:

java - 编辑时,空格不会在 java eclipse 中推送单词

java - java jni native 报错

java - 如何找到传递给函数的参数的字节数?

java.io.IOException : There are no more files - (when copying a pdf to another location)

java - 如何安全地将 List 转换为 csv 字节数组?

java - 如何使用PowerMock模拟私有(private)方法进行测试?

java - Android 应用程序在终止一项 Activity 并启动另一项 Activity 时崩溃

java - 检测文件是否存在

java - 使用 Java API 将数据上传到 HDFS

java - 在 Java 中使用 native 代码