2013-01-22 35 views
1

的InputStream是否有可能使InputStream與基地InputStream相同,只是當基礎流被阻塞時,可以通過調用方法將字節插入到流中?素描:可以插入到

public class HackInputStream extends InputStream { 
    public HackInputStream (InputStream base) { /* stuff */ } 
    public int read() throws IOException { /* stuff */ } 
    public void insertByte(byte b) { /* stuff */ } 
} 

我將只插入字節時基本流肯定是阻塞,所以競爭條件不應該是一個問題。我嘗試使用一個從基礎流中貪婪地讀取字節的線程來實現這個類,使其成爲LinkedBlockingQueueinsertByte將該字節直接插入到隊列中,並且read只是從隊列中讀取字節,當隊列爲空時阻塞。

這幾乎奏效......但是當我使用new Scanner(new HackInputStream(System.in)做出Scanner時,nextLine方法不起作用。不幸的是,我首先想要這個奇怪的類的原因是爲了阻止阻止的Scanner

(以下是我正在試圖解決的問題,如果有人有更好的解決辦法:

我的計劃是一個「空殼」給出命令時,會啓動任務(線程)一些任務終止我想在任務終止時立即返回命令提示符,但是如果任務永遠不終止,我想通過輸入換行符來終止它。

當前,主線程等待當看門狗線程等待換行符時終止任務,現在,如果任務自行終止,我不能輸入一個命令,而不需要手動輸入一個換行符。 e看門狗線程被不間斷地阻塞,並且無論如何都會消耗下一行輸入,可能導致下一個命令未讀。我試圖改變System.in,這樣我可以給它換行編程)

回答

0

更新:我只調用Scanner.nextLine()如果任務仍在運行解決我的問題在一個更簡單的方法。