的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 */ }
}
我將只插入字節時基本流肯定是阻塞,所以競爭條件不應該是一個問題。我嘗試使用一個從基礎流中貪婪地讀取字節的線程來實現這個類,使其成爲LinkedBlockingQueue
。 insertByte
將該字節直接插入到隊列中,並且read
只是從隊列中讀取字節,當隊列爲空時阻塞。
這幾乎奏效......但是當我使用new Scanner(new HackInputStream(System.in)
做出Scanner
時,nextLine
方法不起作用。不幸的是,我首先想要這個奇怪的類的原因是爲了阻止阻止的Scanner
!
(以下是我正在試圖解決的問題,如果有人有更好的解決辦法:
我的計劃是一個「空殼」給出命令時,會啓動任務(線程)一些任務終止我想在任務終止時立即返回命令提示符,但是如果任務永遠不終止,我想通過輸入換行符來終止它。
當前,主線程等待當看門狗線程等待換行符時終止任務,現在,如果任務自行終止,我不能輸入一個命令,而不需要手動輸入一個換行符。 e看門狗線程被不間斷地阻塞,並且無論如何都會消耗下一行輸入,可能導致下一個命令未讀。我試圖改變System.in
,這樣我可以給它換行編程)