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.setInany を使用できます。何もしないので、閉じることができない独自のものを作成できます。InputStreamByteArrayInputStream.closeInputStream

于 2013-07-21T19:52:55.813 に答える