gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:30:35 25 4
gpt4 key购买 nike

关闭标准控制台 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com