2012-10-23 28 views
6

Olası Çoğalt:
Writing data to System.inJava'da System.in'ye nasıl değer atanır?

Biz System.in (Standart Girdi) konsola bağlı olduğunu biliyoruz. Bu yüzden, ne zaman konsola yazarsak, bu akıma akacak. Ancak, bu Standart Girişe konsoldan girmeden, yani System.in = "ABCD" gibi bir değeri iletmenin herhangi bir yolu var. Ben sadece değer konsoldan geçerken taklit etmek istiyorum.

+0

tam olarak bununla ne yapmak istiyorsun? Ben bir şey ODD geliyor. Aslında, System.in'de ne olduğunu ve ona atamadığını okursunuz. –

cevap

13

Evet, var. System.setIn(InputStream in)'u kullanın.

Sen belirli bir değer sağlamak için isterseniz StringBufferInputStream kullanabilmesi için, yanı InputStream herhangi alt türü tedarik şöyle olabilir

:

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

+1, 'public final static InputStream' –

+0

olarak bildirildi, ancak Çoklu iş parçacıkları için çalışmıyor. Bir iş parçacığı içinde System.setIn (ler) i kullandım ve başka bir iş parçacığı içinde Scanner.nextLine() kullanıyorum. Bir iş parçacığından System.SetIn değerine geçtiğimde, Scanner.nextLine() 'ın kullanıldığı diğer iş parçacığına herhangi bir etki yaratmadı. Birden çok iş parçacığında çalışmasını sağlamak için herhangi bir yolu var mı? – Angom

+2

Okuduğumda, ilk iş parçacığında System.in işlevini değiştirmeden önce ikinci iş parçacığında bir "Tarayıcı" oluşturdunuz. Tarayıcı, oluşturma sırasında kendisine verilen "InputStream" öğesine bir referans tutar. İkinci iş parçacığındaki * Tarayıcıyı oluşturmadan önce * ilk iş parçacığından 'System.setIn (...)' olarak adlandırırsanız, sorunsuz çalışır. – mthmulders

0

Bence bunun yerine doğrudan erişim yönteminizi sahip System.in:

public void run() { 

    process(System.in); 

} 

public void process(InputStream is) { 

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

    ... 

} 
: bir giriş akışı yöntemiyle geçirilir, böylece

public void process() { 

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

    ... 

} 

Bunu çarpanlarına olmalıdır

Bu, size aynı davranışı verir, ancak iş mantığını, kendi kendi test girişleriniz için giriş akışlarıyla da çağırmanıza izin verir.

İlgili konular