可能性の重複:
Writing data to System.inJavaではSystem.inに値を割り当てる方法は?
我々はSystem.in
(標準入力)がコンソールに接続されていることを知っています。コンソールに書き込むたびに、このストリームに流れます。しかし、コンソールから入力することなく、この標準入力に値を渡す方法はありません。つまり、System.in = "ABCD"
のようになります。私はちょうど値がコンソールから渡っているので真似したいと思う。
可能性の重複:
Writing data to System.inJavaではSystem.inに値を割り当てる方法は?
我々はSystem.in
(標準入力)がコンソールに接続されていることを知っています。コンソールに書き込むたびに、このストリームに流れます。しかし、コンソールから入力することなく、この標準入力に値を渡す方法はありません。つまり、System.in = "ABCD"
のようになります。私はちょうど値がコンソールから渡っているので真似したいと思う。
はい、あります。 System.setIn(InputStream in)
を使用してください。
あなたが特定の値を指定したい場合、あなたはStringBufferInputStream
を使用することができますので、あなたがそうのように、だけでなくInputStream
の任意のサブタイプを供給することができます:
StringBufferInputStream s = new StringBufferInputStream("ABCD");
System.setIn(s);
+1 'public final static InputStream' –
と宣言されていますが、複数のスレッドでは機能しません。私は1つのスレッドでSystem.setIn(s)を使用し、別のスレッドではScanner.nextLine()を使用しています。あるスレッドからSystem.SetInに値を渡すと、Scanner.nextLine()が使用されている他のスレッドには何の効果もありません。複数のスレッドで動作させる方法はありますか? – Angom
私が読んでいるように、あなたはすでに第2のスレッドに 'Scanner'を作成しています、*最初のスレッドで' System.in'を変更する前*です。スキャナは、作成中に供給された 'InputStream'への参照を保持します。 2番目のスレッドで 'Scanner'を作成する前に最初のスレッドから' System.setIn(...) 'を呼び出す場合、問題なく動作します。 – mthmulders
私はその代わりに、あなたの方法で直接アクセスすることを考えますSystem.in:
public void run() {
process(System.in);
}
public void process(InputStream is) {
byte b[] = new byte[4000];
int bytesRead = is.read(b);
...
}
:の入力ストリームは、メソッドに渡されるように
public void process() {
byte b[] = new byte[4000];
int bytesRead = System.in.read(b);
...
}
あなたはそれを考慮する必要があります
これは同じ動作をしますが、テスト目的のために独自の入力ストリームを使用してビジネスロジックを呼び出すこともできます。
正確に何をしたいですか?私は何かODDのように聞こえる。実際にあなたはSystem.inにあるものを読み、それに割り当てません。 –