2012-10-23 11 views
6

Powiel możliwe:
Writing data to System.inW języku Java, jak przypisać wartość do System.in?

Wiemy, że System.in (Input Standard) jest podłączony do konsoli. Tak więc, gdy piszemy w konsoli, będzie płynąć do tego strumienia. Ale czy istnieje sposób na przekazanie wartości do tego standardowego wejścia bez wchodzenia z konsoli, tj. Jak System.in = "ABCD". Chcę tylko naśladować, gdy wartość przechodzi z konsoli.

+0

co dokładnie chcesz z tym zrobić? Brzmi coś ODD. Właściwie to czytasz to, co jest w System.in i NIE przypisujesz tego. –

Odpowiedz

13

Tak, jest. Użyj System.setIn(InputStream in).

można podać dowolny podtyp InputStream, tak więc jeśli chcesz podać konkretną wartość, można użyć StringBufferInputStream, tak:

StringBufferInputStream s = new StringBufferInputStream("ABCD"); 
System.setIn(s); 
+1

+1, chociaż jest zadeklarowany jako "publiczny ostateczny statyczny InputStream" –

+0

Ale nie działa dla wielu wątków. Użyłem System.setIn (s) w jednym wątku, aw innym wątku używam Scanner.nextLine(). Kiedy przekazałem wartość do System.SetIn z jednego wątku, nie miało to żadnego wpływu na inny wątek, w którym używana jest metoda Scanner.nextLine(). Czy istnieje sposób, aby działał w wielu wątkach? – Angom

+2

Jak czytam, już utworzyłeś 'Skaner' w drugim wątku, * przed * zmianą' System.in' w pierwszym wątku. Skaner zawiera odniesienie do "InputStream" dostarczonego do niego podczas tworzenia. Jeśli nazwiesz 'System.setIn (...)' z pierwszego wątku * przed * utworzeniem 'Skanera' w drugim wątku, to powinno działać bez problemów. – mthmulders

0

myślę, że zamiast metodę bezpośredniego dostępu System.in:

public void process() { 

    byte b[] = new byte[4000]; 
    int bytesRead = System.in.read(b); 

    ... 

} 

należy czynnikiem, który się tak, że strumień wejściowy jest przekazywany do metody:

public void run() { 

    process(System.in); 

} 

public void process(InputStream is) { 

    byte b[] = new byte[4000]; 
    int bytesRead = is.read(b); 

    ... 

} 

Daje to takie samo zachowanie, ale umożliwia również wywoływanie logiki biznesowej przy użyciu strumieni wejściowych własnych rozwiązań do celów testowych.

Powiązane problemy