2014-09-20 69 views
0

在用於read()方法的Java API,http://docs.oracle.com/javase/7/docs/api/java/io/PushbackInputStream.htmlPushbackInputStream讀()沒有返回-1

讀()方法返回的數據從輸入流中的下一個字節。

然後還有這個非常有用的功能:

Returns: 
     the next byte of data, or -1 if the end of the stream has been reached. 

我發現了手動輸入任意輸入到控制檯不返回-1當輸入流達到上述輸入的結束。例如,我可以輸入(+ 1 2)。代碼將讀取輸入,將元素放入令牌並解析它。

但是當它在換行後到達輸入的末尾(ASCII十進制代碼:10)時。 read()不返回-1。我需要-1來停止解析器執行更多。而不是返回-1,它只是提示用戶在控制檯中輸入新的內容。

經過一番思考,我認爲只有在檢測到EOF時纔會返回-1,這隻能通過輸入文件完成,而不是在控制檯中手動輸入。這聽起來正確嗎?是否有任何技巧,例如將EOF插入到控制檯輸入中,以便inputstream read()實際上會返回-1?

或者我應該開始使用輸入文件?

回答

0

您是否嘗試輸入Ctrl+Z: "It is also used to signal an end-of-file on some operating systems."

不,剛開始使用輸入文件聽起來不對。輸入流可以從各種設備獲得,例如網絡接口,USB端口,鍵盤,鼠標,HDD(文件),A/D轉換器卡等。

+0

這是一個有前途的風險。我輸入了(+ 1 2),然後Ctrl + Z輸入,但在換行後仍會提示用戶。沒有工作,但謝謝你的嘗試!順便說一句,我在Windows 7上。 – Life 2014-09-20 14:39:50

+0

快速[DDuckinG](https://duckduckgo.com/?q=java+console+enter+eof)作爲第三個結果帶來[Java:如何在控制檯程序中使用scanner.hasNextLine而不用Ctrl + Z](http ://stackoverflow.com/questions/21246472/java-how-to-use-scanner-hasnextline-without-ctrlz-in-a-console-program)。也許這有助於進一步。 – 2014-09-20 15:34:49